Это интерактивная задача.
В партии в «Цивилизацию» играют два друга: Дима и Паша. Паша несколько ходов назад разместил на поле Великого полководца, а Дима все еще даже не приблизился к его получению. Уже уверенный в своей победе, Паша, уже уверенный в своей победе, предложил Диме сыграть в игру: если тот сможет отгадать местоположение полководца в тумане войны, полководец не будет участвовать в игре.
Будем считать, что их партия в «Цивилизацию» идет на декартовой плоскости, а в качестве клеток выступают точки с целочисленными координатами. Дима может попросить Пашу передвинуть полководца относительно его текущего местоположения на вектор $$$(\Delta x, \Delta y)$$$ не более $$$100$$$ раз.
Назовем городом точку на плоскости, у которой обе координаты целые.
Тогда после каждой просьбы Паша
Дима не может позволить Паше так легко победить. Помогите ему найти клетку, на которой расположен Великий полководец.
Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число $$$t$$$ — количество наборов входных данных ($$$1 \leq t \leq 500$$$). Для каждого набора входных данных запускается процесс взаимодействия с интерактором.
Взаимодействие с интерактором проходит в виде запросов со стороны вашей программы и ответов со стороны интерактора. Вы можете выполнить действие, описанное в условии, не более $$$100$$$ раз.
Чтобы переместить полководца, выведите строку в формате «? $$$\Delta x$$$ $$$\Delta y$$$», после чего полководец переместится на вектор $$$(\Delta x, \Delta y)$$$ ($$$|\Delta x|, |\Delta y| \leq 2 \cdot 10^9$$$). Интерактор в ответ выведет на отдельной строке количество городов (точек с целыми координатами), которые принадлежат отрезку с краями в столице $$$(0, 0)$$$ и текущем местоположении полководца.
Чтобы вывести ответ на задачу, выведите строку «! $$$x$$$ $$$y$$$», где в качестве $$$x$$$ и $$$y$$$ должны быть текущие координаты полководца. Этот вывод не учитывается в количестве запросов. После этого интерактор выведет вердикт — $$$1$$$, если ваше предположение верно, и $$$0$$$ в противном случае. Если ваш ответ был неверен, ваше решение получит вердикт WA (Wrong Answer), а интерактор завершится. Во избежание получения некорректных вердиктов, считав информацию о том, что выведенный ответ неверен, ваше решение тоже должно завершиться.
Гарантируется, что исходная точка, в которой находится полководец, удовлетворяет условию $$$|x|, |y| \leq 10^9$$$.
Если в какой-то момент ваша программа превышает лимит в $$$100$$$ запросов, ваша программа завершится с вердиктом WA.
Обратите внимание, что лимит в $$$100$$$ запросов устанавливается на каждый из $$$t$$$ наборов входных данных.
Важно: не забывайте после каждой выведенной строки сбрасывать буфер вывода, чтобы интерактор получил ваш запрос. Это можно сделать с помощью std::cout.flush() в C++, System.out.flush() в Java и sys.stdout.flush() в Python, а также аналогичными командами в других языках. Если ваша программа не сбрасывает буфер вывода, она получит вердикт TL (Time Limit Exceeded) или IL (Idleness Limit Exceeded).
Баллы за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи и необходимых подзадач успешно пройдены. В подзадачах значения $$$x_0$$$, $$$y_0$$$ означают начальные координаты полководца (неизвестные вам).
| Подзадача | Баллы | Доп. ограничения | Необходимые подзадачи | Информация о проверке |
| 0 | – | примеры из условия | полная | |
| 1 | 8 | $$$x_0 = 0$$$ или $$$y_0 = 0$$$ | первая ошибка | |
| 2 | 10 | $$$|x_0|, |y_0| \le 4$$$ | первая ошибка | |
| 3 | 22 | $$$|x_0| \le 42$$$ | 0 | первая ошибка |
| 4 | 40 | $$$|x_0|, |y_0| \le 10^6$$$ | 0, 2, 3 | первая ошибка |
| 5 | 20 | нет | 0 – 4 | первая ошибка |
1 6 3 11 1
? 5 5 ? 3 5 ? 2 0 ! 10 10
В тесте из примера в самом начале полководец находился в столице — то есть точке с координатами $$$(0, 0)$$$.
После первого запроса он переместился в точку $$$(5, 5)$$$, и на отрезке, соединяющем его и столицу, оказалось 6 городов с координатами: $$$(0, 0)$$$, $$$(1, 1)$$$, $$$(2, 2)$$$, $$$(3, 3)$$$, $$$(4, 4)$$$, $$$(5, 5)$$$.
После второго запроса полководец перешел в точку $$$(5 + 3, 5 + 5) = (8, 10)$$$, тогда на отрезке между полководцем и столицей оказались 3 города: $$$(0, 0)$$$, $$$(4, 5)$$$ и $$$(8, 10)$$$.
Третьим запросом Дима передвинул полководца в точку $$$(8 + 2, 10 + 0) = (10, 10)$$$, и на отрезке оказались $$$11$$$ городов: $$$(0, 0), (1, 1), \ldots, (10, 10)$$$.
После этих действий Дима предположил, что полководец сейчас находится в точке $$$(10, 10)$$$ — и оказался прав.