Задача C. Counting ones

Автор:A. Usmanov   Ограничение времени:1 сек
Ввод / вывод:интерактивный   Ограничение памяти:256 Мб

Условие

Данная задача является интерактивной. Ваша программа будет взаимодействовать с программой жюри путем отправки и приема сообщений определенного вида.

У жюри есть двумерная матрица N строк на M столбцов заполненная числами, где каждое число может быть либо 1, либо 0. Строки имеют нумерацию с 1 по N сверху вниз, столбцы — с 1 по M слева направо.

Ваша программа может делать запросы вида "? Xi Yi Ai Bi", где i — номер запроса, Xi, Yi — координаты левого верхнего угла прямоугольника, номера строки и столбца соответственно, а Ai, Bi — размеры сторон прямоугольника, количество строк и столбцов соответственно. В ответ на запрос программа жюри сообщит о количестве единиц в прямоугольнике из запроса.

Каждый из прямоугольников должен целиком лежать внутри матрицы, то есть должны выполняться следующие неравенства:

1 ≤ Xi, Ai ≤ N и 1 ≤ Yi, Bi ≤ M

Xi + Ai − 1 ≤ N и Yi + Bi − 1 ≤ M

Также имеются ограничения на размеры прямоугольников. Первый прямоугольник должен быть меньше матрицы по каждой из сторон без учета ориентации, а каждый последующий прямоугольник должен быть меньше предыдущего по каждой из сторон без учета ориентации. Более формально должны выполняться следующие неравенства:

min(A1, B1) < min(N, M) и max(A1, B1) < max(N, M)

min(Ai, Bi) < min(Ai − 1, Bi − 1) и max(Ai, Bi) < max(Ai − 1, Bi − 1) для i > 1

Требуется определить количество единиц в матрице, сделав любое количество запросов. Гарантируется, что значения чисел в матрице определены заранее и не зависят от запросов.

Формат входных данных

В первой строке входных данных записаны целые числа N и M — размеры матрицы.

Протокол взаимодействия

Чтобы сделать i-й запрос, ваша программа должна вывести "? Xi Yi Ai Bi", где Xi, Yi — целые числа, координаты левого верхнего угла прямоугольника, номера строки и столбца соответственно, а Ai, Bi — целые числа, размеры сторон прямоугольника, количество строк и столбцов соответственно.

После запроса программа жюри отвечает вашей программе целым числом S — количеством единиц в прямоугольнике из запроса.

Когда ваша программа определила ответ на задачу, она должна вывести "! S", где S — целое число, количество единиц в матрице. После вывода ответа программа должна завершиться.

Если ваша программа сделает недопустимый запрос, то она получит вердикт "Presentation error".

Каждый запрос и вывод окончательного результата должен быть одиночной строкой заканчивающейся одиночным переводом строки (\n). Буфер вывода необходимо сбрасывать после каждой строки:

Язык C++ Pascal Java Python
Код cout.flush() flush(output) System.out.flush() stdout.flush()

Ограничения

10 ≤ N, M ≤ 100

0 ≤ S ≤ 104

Пояснение к примерам

Матрицы из примеров представлены на картинке.

Примеры тестов

Стандартный вход Стандартный выход
1
11 13

34

0

0

? 1 1 10 12

? 1 11 11 3

? 10 1 2 10

! 34
2
10 10

38

28

23

16

13

5

3

3

0

? 1 2 9 9

? 3 1 8 8

? 4 2 7 7

? 2 4 6 6

? 5 5 5 5

? 3 7 4 4

? 8 8 3 3

? 1 1 2 2

? 10 10 1 1

! 44

0.165s 0.020s 15