Задача №115172. Хорошие раскраски -- 4

Саша предложил Ильдару сыграть в игру. Ильдару эта идея не понравилась, но отказать Саше он не смог, а потому попросил вас написать программу, которая будет играть вместо него.

Игра начинается с того, что Саша достает клетчатый лист размером \(n \times n\) клеток и закрашивает какие-то \(2n\) клеток в цвета \(1,2,\ldots, 2n\), соответственно. За один ход Ильдар может указать на какую-то еще не закрашенную клетку и попросить Сашу закрасить эту клетку. Саша красит эту клетку в один из \(2n\) цветов по своему выбору. Ильдар может сделать не более \(10\) ходов, после чего ему требуется отыскать хорошую четверку клеток. Четверка клеток называется хорошей если выполняются следующие условия:

  • Никакие две клетки из четверки не раскрашены в один и тот же цвет;
  • Центры клеток образуют прямоугольник, стороны которого параллельны линиям сетки.

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

С момента запуска программы вам на входе будет доступно число \(t\) (\(1 \leq t \leq 200\)) — количество независимых игр, которые должна отыграть ваша программа.

В начале каждой игры в первой строке будет доступно число \(n\) (\(3 \leq n \leq 1000\)) — размер поля. В последующих \(2n\) строках будут указаны позиции клеток, которые изначально раскрасил Саша. В \(i\)-й из строк указана пара чисел \((x_i, y_i)\) (\(1 \leq x_i, y_i \leq n\)) — позиция клетки, раскрашенной в цвет под номером \(i\).

После того как вы считаете эти данные, можно будет совершить не более \(10\) ходов. Чтобы сделать ход, выведите « ? \(x\) \(y\)» (\(1 \leq x,y \leq n\)). В ответ на это программа жюри в единственной строке выведет единственное число от \(1\) до \(2n\) — цвет клетки \((x,y)\).

После совершения ходов (не обязательно делать все \(10\) ходов и не обязательно делать хотя бы \(1\) ход) выведите строку в формате « ! \(x_1\) \(x_2\) \(y_1\) \(y_2\)» (\(1 \leq x_1, x_2, y_1, y_2 \leq n\)). Если клетки \((x_1, y_1)\), \((x_1, y_2)\), \((x_2, y_1)\), \((x_2, y_2)\) раскрашены в различные цвета, то программа жюри выведет « OK », после чего ваша программа должна сразу перейти к обработке следующей игры. В ином случае, если какие-то из указанных клеток раскрашены в один цвет или одна из клеток еще не раскрашена, то программа жюри выведет вам « ERROR », при считывании этой строки ваша программа должна немедленно завершить свое исполнение.

Обратите внимание, что в данной задаче интерактор является адаптивным, то есть состояние раскраски всегда соответствует уже сделанным запросам, но в остальном может меняться в процессе работы .

Примечание

Визуализация примера:

Для корректной работы программы после каждой операции вывода запроса или вывода ответа требуется выводить символ перевода строки, а также очищать буфер вывода. Функция print в Python или вывод endl в С++ делают это автоматически. Также можно делать следующие операции:

  • В языке Pascal: flush(output) ;
  • В С/С++: fflush(stdout) или cout.flush() ;
  • В Java: System.out.flush() ;
  • В Python: sys.stdout.flush() из библиотеки sys ;
  • В C # : Console.Out.Flush() ;
Примеры
Входные данные
STUPID
1
3
1 1 2
3 1 4
5 6 1
1 2
1 3
2 1
2 3
3 1
3 2
Выходные данные
YES
max-questions: 1
Сдать: для сдачи задач необходимо войти в систему