Universal Cup Judging System

Universal Cup

Süre Sınırı: 2 s Bellek Sınırı: 1024 MB Toplam puan: 100 Zorluk: [göster]
İstatistikler

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

Море, мы снова встретились. Пусть и следующие летние каникулы будут счастливыми! Очень давно Уна и Камоэ уже были хорошими друзьями.

Они любили играть в игры. В прошлый раз игра, придуманная Уной, была легко решена отличной стратегией Камоэ. На этот раз Уна принесла новую игру.

Уна рассматривает дерево с $n$ вершинами. Камоэ может сделать не более $n$ запросов:

  • Камоэ может сообщить Уне перестановку $P_1, P_2, \dots, P_n$ (где $0 \le P_i \le n-1$ и все $P_i$ различны). Тогда Уна сообщает Камоэ длину взвешенного диаметра дерева, когда каждой вершине $i$ присвоен вес $2^{P_i}$.

Но иногда Камоэ замечает, что Уна устраивает неприятности. Точнее, бывают случаи, когда невозможно однозначно определить дерево, сколько бы запросов ни задавать. В таких случаях Камоэ может сообщить, что решения нет.

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

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

  • C/C++: fflush(stdout) или cout.flush()
  • Java и Kotlin: System.out.flush()
  • Python: sys.stdout.flush()

Сначала считайте количество тестовых случаев $T$ ($1 < T < 10^4$). Для каждого тестового случая считайте размер дерева $n$ ($2 \le n \le 100$, $\sum n^2 < 10^6$).

Чтобы сделать запрос, выведите одну строку в формате "? $P_1 P_2 \dots P_n$" (где $0 \le P_i \le n-1$ и $P_i \ne P_j$ для $1 < i < j \le n$). Затем считайте строку из $n$ символов, представляющую вес диаметра дерева в двоичной записи. Если запрос недействителен или вы сделали более $n$ запросов в одном тестовом случае, программа жюри выведет -1. Прочитав -1, вы должны немедленно завершить работу, чтобы избежать неопределённого поведения.

Если вы считаете, что невозможно однозначно определить дерево, выведите "! NO". Иначе выведите одну строку в формате "! YES $u_1 v_1 u_2 v_2 \dots u_{n-1} v_{n-1}$", где $(u_i, v_i)$ — рёбра дерева. Рёбра можно выводить в любом порядке.

После этого считайте слово "OK" или "WA", указывающее на правильность ответа. Если вы прочитали "WA", вы должны немедленно завершить работу, чтобы избежать неопределённого поведения. Если вы вывели YES, хотя дерево невозможно определить, даже если ответ был верен, Уна решит, что вы жульничаете, и ответ будет считаться неверным.

Программа жюри не является адаптивной, поэтому ответ не меняется после запросов.

Примеры

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

2
4
1110
1110
OK
3
111
OK

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

? 0 1 2 3
? 2 1 0 3
! YES 1 4 2 4 3 4
? 0 1 2
! NO

Примечание

Предоставляется инструмент тестирования, который участники могут использовать для разработки и тестирования своего решения. Этот инструмент можно скачать из приложенных файлов. Запустите инструмент с опцией "-h", чтобы получить описание использования. Инструмент тестирования реализует лишь часть функций реальной программы жюри и поддерживает только некоторые сценарии тестирования.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.