E. Слишком средне...
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

Мы загадали перестановку $$$p_1, p_2, \dots, p_n$$$ чисел от $$$1$$$ до $$$n$$$, где $$$n$$$ четное. Вы можете угадать ее с помощью следующих запросов:

$$$?$$$ $$$k$$$ $$$a_1$$$ $$$a_2$$$ $$$\dots$$$ $$$a_k$$$.

В ответ, вы узнаете, правда ли, что среднее арифметическое элементов с индексами $$$a_1, a_2, \dots, a_k$$$ является целым числом. Другими словами, вы получите $$$1$$$ если $$$\frac{p_{a_1} + p_{a_2} + \dots + p_{a_k}}{k}$$$ является целым, и $$$0$$$ в противном случае.

Вы должны угадать перестановку. Вы можете задать не более $$$18n$$$ запросов.

Заметим, что перестановки $$$[p_1, p_2, \dots, p_k]$$$ и $$$[n + 1 - p_1, n + 1 - p_2, \dots, n + 1 - p_k]$$$ неразличимы. Поэтому, гарантируется, что $$$p_1 \le \frac{n}{2}$$$.

Отметим, что $$$p$$$ зафиксирована и не зависит от ваших запросов. Другими словами, интерактор не адаптивен.

Также вы не должны минимизировать количество запросов.

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

Первая строка содержит единственное целое число $$$n$$$ ($$$2 \le n \le 800$$$, $$$n$$$ четное).

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

Вы начинаете взаимодействие, считав $$$n$$$.

Чтобы задать вопрос об элементах на позициях $$$a_1, a_2, \dots, a_k$$$, в отдельной строке выведите

$$$?$$$ $$$k$$$ $$$a_1$$$ $$$a_2$$$ ... $$$a_k$$$

Числа в запросе должны удовлетворять условию $$$1 \le a_i \le n$$$, и все $$$a_i$$$ должны быть различными. Не забудьте сделать операцию 'flush', чтобы получить ответ.

В ответ, вы получите $$$1$$$ если $$$\frac{p_{a_1} + p_{a_2} + \dots + p_{a_k}}{k}$$$ является целым, и $$$0$$$ в противном случае.

В случае, если ваш запрос не соответствует требованиям, или вы задали более $$$18n$$$ запросов, программа выведет $$$-1$$$ и прекратит взаимодействие. Вы получите вердикт Неправильный ответ. Вам нужно завершить работу вашей программы, чтобы не получить другие вердикты.

Когда вы определили перестановку, выведите

$$$!$$$ $$$p_1$$$ $$$p_2$$$ ... $$$p_n$$$

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

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

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать единственное целое число $$$n$$$ ($$$2 \le n \le 800$$$, $$$n$$$ четное).

В следующей строке выведите $$$n$$$ целых чисел $$$p_1, p_2, \dots, p_n$$$ — перестановку чисел от $$$1$$$ до $$$n$$$. $$$p_1 \le \frac{n}{2}$$$ должно выполняться.

Пример
Входные данные
2
1 2
Выходные данные
? 1 2
? 1 1
! 1 2