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

Это интерактивная задача с двойным запуском (коммуникационная).

Участвуют два игрока: Призрак Джа и Утёнок Кряк. Жюри (иначе известное как интерактор данной задачи) сначала взаимодействует с Джа. После того как Джа завершает взаимодействие, жюри взаимодействует с Кряком. Обратите внимание, что Джа и Кряк не могут напрямую передавать информацию друг другу; оба игрока могут только отправлять информацию жюри или получать её от жюри.

До начала взаимодействия жюри определяет целое число $$$n$$$ и массив из $$$n$$$ целых положительных чисел $$$a_1, a_2, \ldots, a_n$$$. Эти значения одинаковы для обоих игроков.

Джа получает от жюри $$$n$$$ и массив из $$$n$$$ целых положительных чисел $$$a_1, a_2, \ldots, a_n$$$, который он хочет передать Кряку, где $$$a_i \le 10^6$$$. Для этого Джа выбирает целое число $$$k$$$ такое, что $$$$$$k \le \left\lceil \frac{10n}{9} \right\rceil + 150,$$$$$$ и создаёт массив целых положительных чисел $$$b_1, b_2, \ldots, b_k$$$, где $$$b_i \le 10^6$$$, и отправляет его жюри. Затем жюри передаёт Кряку целые числа $$$n$$$ и $$$k$$$. Кряк может задать жюри не более $$$180n + 150$$$ запросов следующего вида:

  • Выбрать любые два целых числа $$$i$$$ и $$$j$$$ ($$$1 \le i, j \le k$$$, $$$i \neq j$$$), и жюри ответит значением $$$\mathrm{gcd}(b_i, b_j)$$$.

Здесь $$$\gcd(x, y)$$$ обозначает наибольший общий делитель (НОД) чисел $$$x$$$ и $$$y$$$.

Обратите внимание, что оба массива $$$a$$$ и $$$b$$$ скрыты от Кряка; Кряк может получать информацию только из запросов.

Джа хочет гарантировать, что Кряк сможет определить исходный массив $$$a$$$. Ваша задача — выступить в роли обоих игроков и определить оптимальную стратегию взаимодействия для обоих игроков, чтобы Кряк правильно определил исходный массив $$$a$$$.

Первый запуск

Ваш код будет запущен ровно дважды на каждом тесте. В первом запуске вы — Джа.

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

Первая строка входных данных содержит строку first. Это нужно для того, чтобы ваша программа поняла, что это первый запуск, и действовала как Джа.

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

Первая строка $$$i$$$-го набора входных данных содержит целое число $$$n$$$ ($$$1 \le n \le 10^3$$$) — длину массива $$$a$$$ для $$$i$$$-го набора входных данных.

Вторая строка $$$i$$$-го набора входных данных содержит $$$n$$$ целых чисел $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \le a_i \le 10^6$$$) — массив $$$a$$$.

Гарантируется, что сумма значений $$$n$$$ по всем наборам входных данных не превосходит $$$10^3$$$.

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

Для каждого набора входных данных сначала выведите целое число $$$k$$$ ($$$1 \le k \le \left\lceil \frac{10n}{9} \right\rceil + 150$$$), обозначающее длину массива $$$b$$$. Затем выведите $$$k$$$ целых чисел $$$b_1, b_2, \ldots, b_k$$$ ($$$1 \le b_i \le 10^6$$$), обозначающих массив $$$b$$$, который Джа отправит жюри. Этот массив будет использоваться для ответа на запросы во втором запуске.

После этого перейдите к следующему набору входных данных или завершите программу, если это был последний набор.

Второй запуск

Во втором запуске вы — Кряк.

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

Первая строка входных данных содержит строку second. Это нужно для того, чтобы ваша программа поняла, что это второй запуск, и действовала как Кряк.

Вторая строка входных данных содержит ровно одно целое число $$$t$$$ ($$$1 \le t \le 100$$$) — количество наборов входных данных. Обратите внимание, что это число равно $$$t$$$ из входных данных первого запуска.

Первая строка каждого набора входных данных содержит два целых числа $$$n$$$ и $$$k$$$ ($$$1 \le n \le 10^3$$$, $$$1 \le k \le \left\lceil \frac{10n}{9} \right\rceil + 150$$$). Это обозначает длины массивов $$$a$$$ и $$$b$$$ соответственно.

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

Взаимодействие

Для $$$i$$$-го набора входных данных напомним, что сначала вы получаете $$$n$$$ и $$$k$$$ от жюри согласно описанному выше формату входных данных. После получения этих данных вы можете задать не более $$$180n + 150$$$ запросов следующего вида:

  • ? i j ($$$1 \leq i, j \leq k$$$, $$$i \neq j$$$).

После каждого запроса жюри ответит значением $$$\mathrm{gcd}(b_i, b_j)$$$, которое вы должны считать из входного потока.

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

Когда вы готовы сообщить исходный массив $$$a$$$, вы можете сделать это в следующем формате:

  • ! $$$a_1, a_2, \ldots ,a_n$$$ ($$$1 \leq a_i \leq 10^6$$$).

После этого перейдите к следующему набору входных данных или завершите программу, если все наборы обработаны.

Интерактор не является адаптивным. То есть оба массива $$$a$$$ и $$$b$$$ не изменятся в ходе взаимодействия и всегда будут теми же массивами, что и в первом запуске.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода$$$^{\text{∗}}$$$. В противном случае вы получите вердикт Решение «зависло».

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

$$$^{\text{∗}}$$$Чтобы сбросить буфер вывода, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.
Примеры
Входные данные
first
2
6
1 1 4 5 1 4
3
2 6 10
Выходные данные
7
20 1 1 4 5 1 4
4
30 2 6 10
Входные данные
second
2
3 4

2

6

10
6 7

1

1

4

5

1

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

? 1 2

? 1 3

? 1 4

! 2 6 10

? 1 2

? 1 3

? 1 4

? 1 5

? 1 6

? 1 7

! 1 1 4 5 1 4
Примечание

В первом запуске есть два набора входных данных.

Для первого набора входных данных Джа получает $$$a = [1, 1, 4, 5, 1, 4]$$$. Он решает отправить $$$b = [20, 1, 1, 4, 5, 1, 4]$$$.

Для второго набора входных данных Джа получает $$$a = [2, 6, 10]$$$. Он решает отправить $$$b = [30, 2, 6, 10]$$$.

Во втором запуске порядок наборов входных данных перемешан. Поэтому Кряк сначала получает набор входных данных с $$$n = 3$$$ и $$$k = 4$$$. Он спрашивает $$$\mathrm{gcd}(b_1, b_i)$$$ для $$$i = 2, 3, 4$$$, и жюри отвечает $$$2, 6, 10$$$. Таким образом, Кряк может определить, что исходный массив равен $$$[2, 6, 10]$$$.

Затем Кряк получает набор входных данных с $$$n = 6$$$ и $$$k = 7$$$. Он спрашивает $$$\mathrm{gcd}(b_1, b_i)$$$ для $$$i = 2, 3, 4, 5, 6, 7$$$, и жюри отвечает $$$1, 1, 4, 5, 1, 4$$$. Таким образом, Кряк может определить, что исходный массив равен $$$[1, 1, 4, 5, 1, 4]$$$.

Этот пример иллюстрирует, что хотя наборы входных данных во втором запуске могут появляться в другом порядке, используются те же массивы $$$a$$$ и $$$b$$$, что и в первом запуске.