Это интерактивная задача.
Мы загадали перестановку \(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\).
Чтобы задать вопрос об элементах на позициях \(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}\) должно выполняться.