E. X-OR
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

У Ехаба есть загаданная перестановка $$$p$$$ длины $$$n$$$, состоящая из элементов от $$$0$$$ до $$$n-1$$$. По какой-то причине вы хотите выяснить перестановку. Для этого вы можете спросить у Ехаба $$$2$$$ разных индекса $$$i$$$ и $$$j$$$, и он ответит $$$(p_i|p_j)$$$, где $$$|$$$ обозначает операцию побитового ИЛИ.

У Ехаба есть достаточно свободного времени, чтобы ответить на $$$4269$$$ вопросов, и, несмотря на то, что ему несложно отвечать на так много вопросов, ему лень играть в ваши глупые игры, поэтому он заранее зафиксирует перестановку и не изменит ее в зависимости от ваших запросов. Можете ли вы угадать перестановку?

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

В единственной строке записано целое число $$$n$$$ $$$(3 \le n \le 2048)$$$ — длина перестановки.

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

Чтобы задать вопрос, выведите "? $$$i$$$ $$$j$$$" (без кавычек, $$$i \neq j$$$) Затем вы должны считать ответ, который будет равен $$$(p_i|p_j)$$$.

Если мы ответим $$$-1$$$ вместо правильного ответа, это означает, что вы превысили количество запросов или сделали неверный запрос.

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

Чтобы дать ответ, выведите "! $$$p_1$$$ $$$p_2$$$ $$$\ldots$$$ $$$p_n$$$" (без кавычек). Заметьте, что вывод ответа не считается одним из $$$4269$$$ запросов.

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

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

Взломы:

Первая строка должна содержать целое число $$$n$$$ ($$$3 \le n \le 2^{11}$$$) — длину перестановки $$$p$$$.

Вторая строка должна содержать $$$n$$$ целых чисел, разделенных пробелами $$$p_1$$$, $$$p_2$$$, $$$\ldots$$$, $$$p_n$$$ ($$$0 \le p_i < n$$$) — элементы перестановки $$$p$$$.

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

В первом примере перестановка равна $$$[1,0,2]$$$. Вы начинаете с вопроса $$$p_1|p_2$$$, а Ехаб отвечает $$$1$$$. Затем вы спрашиваете $$$p_1|p_3$$$, а Ехаб отвечает $$$3$$$. Наконец, вы спрашиваете о $$$p_2|p_3$$$, а Ехаб отвечает $$$2$$$. После этого вы угадываете перестановку.