D. Найти склейку в стоге чисел
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Это интерактивная задача.

Вы нашли на чердаке числа $$$k$$$ и $$$n$$$, но потеряли два массива $$$A$$$ и $$$B$$$.

Вы помните, что:

  • $$$|A| + |B| = n$$$, суммарная длина массивов равна $$$n$$$.
  • $$$|A| \geq k$$$ и $$$|B| \geq k$$$, длина каждого из массивов как минимум $$$k$$$.
  • Массивы состоят только из чисел от $$$1$$$ до $$$k$$$.
  • Если взять любые $$$k$$$ подряд идущих элементов из массива $$$A$$$, то они все будут различными. Если взять любые $$$k$$$ подряд идущих элементов из массива $$$B$$$, то они все также будут различными.

К счастью, добрый дух, который поселился на чердаке, нашёл эти массивы и склеил их в массив $$$C$$$ длиной $$$n$$$. То есть сначала в массив $$$C$$$ были по очереди записаны элементы массива $$$A$$$, а затем — элементы массива $$$B$$$.

Вы можете задать доброму духу до $$$250$$$ вопросов. Каждый вопрос содержит индекс $$$i$$$ ($$$1 \leq i \leq n$$$). В ответ вы получите $$$i$$$-й элемент склеенного массива $$$C$$$.

Вам требуется найти длины массивов $$$A$$$ и $$$B$$$, либо сообщить, что это невозможно сделать однозначно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 300$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора содержит два целых числа $$$n$$$ и $$$k$$$ ($$$1 \leq k \leq 50$$$, $$$2 k \leq n \leq 10^{6}$$$).

Обратите внимание, что сумма $$$n$$$ по наборам входных данных не ограничена.

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

Взаимодействие для каждого набора входных данных начинается с чтения целого числа $$$n$$$.

Затем вы можете сделать до $$$250$$$ запросов.

Чтобы сделать запрос, выведите строку в формате «? x» (без кавычек) ($$$1 \leq x \leq n$$$). После каждого запроса считайте целое число — ответ на ваш запрос.

Если вы сделаете слишком много запросов, то получите вердикт Wrong answer.

Чтобы сообщить ответ, выведите строку в формате «! a b» (без кавычек), где $$$a$$$ и $$$b$$$ — найденные вами длины массивов $$$A$$$ и $$$B$$$ соответственно. Ответ не учитывается при подсчёте количества запросов.

Если же невозможно однозначно определить длины массивов, выведите «! -1» (без кавычек). Обратите внимание, что если вы ответите $$$-1$$$ в то время, когда существует последовательность из не более чем $$$250$$$ запросов, которая однозначно определяет длины массивов, вы получите вердикт Wrong answer.

Гарантируется, что существуют такие не противоречащие условию массивы $$$A$$$ и $$$B$$$, для которых вывод интерактора корректен.

Интерактор не адаптивен, что означает, что ответ известен до того, как участник задаст запросы, и не зависит от запросов, заданных участником.

Если ваша программа сделает более $$$250$$$ запросов, ваша программа должна немедленно завершиться, чтобы получить вердикт Wrong answer. В противном случае вы можете получить произвольный вердикт, потому что ваше решение продолжит читать из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «IL» (Idleness limit exceeded). Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

В этой задаче взломы отключены.

Пример
Входные данные
6
5 2

1

2

2

18 4

2

4

1

1

4

3 1

10 5

9 3

3

3

2

12 4

1

3

1

3

1

3
Выходные данные

? 1

? 2

? 3

! 2 3

? 9

? 13

? 10

? 14

? 6

! 9 9

! -1

! 5 5

? 3

? 6

? 9

! 6 3

? 1

? 2

? 5

? 6

? 9

? 10

! -1
Примечание

Рассмотрим первый пример. Мы запросили первые $$$3$$$ элемента из $$$5$$$. Теперь мы знаем, что массив $$$C$$$ выглядит как $$$[1, 2, 2, ?, ?]$$$. Мы точно знаем, что третий элемент не из массива $$$A$$$ — ведь по условию любые $$$k$$$ подряд идущих элементов (в нашем случае $$$k = 2$$$) в массиве $$$A$$$ различны. Значит, третий элемент точно расположен в массиве $$$B$$$. Получается, что длина массива $$$A$$$ равняется $$$2$$$, а длина массива $$$B$$$ — $$$3$$$.

На картинке показаны массивы из всех наборов тестовых данных. Жёлтым отмечены элементы, значения которых были запрошены.