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

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

Очистив Прибрежную Зону, Гретель обнаружила монстра по имени Генокракен и удерживает его для своих научных исследований.

Нервная система монстра может быть представлена как дерево$$$^{\dagger}$$$ из $$$n$$$ вершин (на самом деле, всё не должно постоянно напоминать деревья$$$\ldots$$$), пронумерованных от $$$0$$$ до $$$n-1$$$, с вершиной $$$0$$$ в качестве корня.

Цель Гретель — узнать точную структуру нервной системы монстра. Более конкретно, она хочет узнать значения $$$p_1, p_2, \ldots, p_{n-1}$$$ дерева, где $$$p_i$$$ ($$$0 \le p_i < i$$$) является прямым предком вершины $$$i$$$ ($$$1 \le i \le n - 1$$$).

Она не знает точно, как расположены вершины, но знает несколько приятных фактов:

  • Если мы удалим корневую вершину $$$0$$$ и все смежные ребра, то это дерево превратится в лес, состоящий только из путей$$$^{\ddagger}$$$. Каждая вершина, которая изначально была смежной с вершиной $$$0$$$, будет концом какого-то пути.
  • Вершины нумеруются таким образом, что если $$$1 \le x \le y \le n - 1$$$, то $$$p_x \le p_y$$$.
  • Вершина $$$1$$$ гарантированно имеет ровно две смежные вершины (включая вершину $$$0$$$).
Дерево на этой картинке не удовлетворяет условию, потому что если мы удалим вершину $$$0$$$, то вершина $$$2$$$ (которая изначально была смежной с вершиной $$$0$$$) не будет концом пути $$$4-2-5$$$.Дерево на этой картинке не удовлетворяет условию, потому что должно выполняться $$$p_3 \le p_4$$$.Дерево на этой картинке не удовлетворяет условию, потому что вершина $$$1$$$ имеет только одну смежную вершину.

Гретель может делать запросы к защитной камере:

  • «? a b» ($$$1 \le a, b < n$$$, $$$a \ne b$$$) — камера проверит, содержит ли простой путь между вершинами $$$a$$$ и $$$b$$$ вершину $$$0$$$.

Однако, чтобы избежать неожиданных последствий от чрезмерной стимуляции существа, Гретель хочет сделать не более $$$2n - 6$$$ запросов. Хотя Гретель одарена, она не может сделать всё сразу, так что можете ли вы протянуть ей руку помощи?

$$$^{\dagger}$$$Дерево — это связный граф, в котором каждая пара различных вершин имеет ровно один простой путь, соединяющий их.

$$$^{\ddagger}$$$Путь — это дерево, вершины которого могут быть записаны в порядке $$$v_1, v_2, \ldots, v_k$$$ так, что рёбра имеют вид $$$(v_i, v_{i+1})$$$ ($$$1 \le i < k$$$).

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

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

Первая строка каждого набора входных данных содержит одно целое число $$$n$$$ ($$$4 \le n \le 10^4$$$) — количество вершин в нервной системе Генокракена.

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

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

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

Затем вы можете делать запросы следующего вида:

  • «? a b» (без кавычек) ($$$1 \le a, b < n$$$, $$$a \ne b$$$).

После запроса прочитайте целое число $$$r$$$ — ответ на ваш запрос. Вам разрешено использовать не более $$$2n - 6$$$ запросов этого типа.

  • Если простой путь между вершинами $$$a$$$ и $$$b$$$ не содержит вершину $$$0$$$, вы получите $$$r = 0$$$.
  • Если простой путь между вершинами $$$a$$$ и $$$b$$$ содержит вершину $$$0$$$, вы получите $$$r = 1$$$.
  • В случае, если вы сделаете более $$$2n-6$$$ запросов или сделаете некорректный запрос, вы получите $$$r = -1$$$. После получения такого ответа ваша программа должна немедленно завершиться, чтобы получить вердикт «Неправильный ответ». В противном случае вы можете получить произвольный вердикт, потому что ваше решение продолжит чтение из закрытого потока.

Когда вы определите структуру, выведите строку в формате «! $$$p_1 \space p_2 \ldots p_{n-1}$$$» (без кавычек), где $$$p_i$$$ ($$$0 \le p_i < i$$$) обозначает индекс прямого предка вершины $$$i$$$. Этот запрос не учитывается в лимите $$$2n - 6$$$ запросов.

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

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

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

Интерактор неадаптивный. Дерево не меняется в процессе взаимодействия.

Взломы

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

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

Первая строка каждого набора входных данных содержит одно целое число $$$n$$$ ($$$4 \le n \le 10^4$$$) — количество вершин в нервной системе Генокракена.

Вторая строка каждого набора входных данных содержит $$$n-1$$$ целых чисел $$$p_1, p_2, \ldots, p_{n-1}$$$ ($$$0 \le p_1 \le p_2 \le \ldots \le p_{n-1} \le n - 2$$$, $$$0 \le p_i < i$$$) — прямые предки вершин $$$1$$$, $$$2$$$, ..., $$$n-1$$$ в системе соответственно.

В каждом наборе входных данных значения $$$p_1, p_2, \ldots, p_{n-1}$$$ должны обеспечивать следующее в дереве:

  • Если мы удалим корневую вершину $$$0$$$ и все смежные ребра, то это дерево превратится в лес, состоящий только из путей. Каждая вершина, которая изначально была смежной с вершиной $$$0$$$, будет концом какого-то пути.
  • Вершина $$$1$$$ имеет ровно две смежные вершины (включая вершину $$$0$$$).

Сумма $$$n$$$ по всем наборам входных данных не должна превышать $$$10^4$$$.

Пример
Входные данные
3
4

1

5

1

0

9

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


? 2 3

! 0 0 1

? 2 3

? 2 4

! 0 0 1 2

! 0 0 0 1 3 5 6 7
Примечание

В первом наборе входных данных нервная система Генокракена образует следующее дерево:

  • Ответ на «? 2 3» равен $$$1$$$. Это означает, что простой путь между вершинами $$$2$$$ и $$$3$$$ содержит вершину $$$0$$$.

Во втором наборе входных данных нервная система Генокракена образует следующее дерево:

  • Ответ на «? 2 3» равен $$$1$$$. Это означает, что простой путь между вершинами $$$2$$$ и $$$3$$$ содержит вершину $$$0$$$.
  • Ответ на «? 2 4» равен $$$0$$$. Это означает, что простой путь между вершинами $$$2$$$ и $$$4$$$ не содержит вершину $$$0$$$.

В третьем наборе входных данных нервная система Генокракена образует следующее дерево: