Universal Cup Judging System

Universal Cup

Time Limit: 3.0 s Memory Limit: 1024 MB Total points: 100 Difficulty: [show] Interactive Hackable ✓
Statistics

Дякую за твою нелегку працю, любий друже. Little Cyan Fish не знає, скільки його зашифрованих слів вдасться передати, але все одно дякує тобі за те, що ти дійшов до цієї точки разом із Little Cyan Fish. Сталося так багато всього, так багато безглуздих речей, Little Cyan Fish втомився, дуже втомився... Протягом минулого року Little Cyan Fish кілька разів відчував, що ось-ось врятує себе сам, але, зрештою, він виявився недостатньо сильним, щоб перерізати нитки на своєму тілі. Little Cyan Fish завжди уявляє, що в тому далекому місці є інший він сам, який може чітко бачити мапу його життя.

— «Прагнення вдалечінь» · Фінал 10-го Китайського студентського чемпіонату з програмування

Це інтерактивна задача.

Що ж, можливо, ви можете спробувати й дізнатися, наскільки це буде складно. Little Cyan Fish відчуває, що його життя — це перестановка невідомої форми. Люди завжди кажуть, що світ сповнений випадковостей, але чому Little Cyan Fish завжди так не щастить?.. Ага! Можливо, випадковість просто настільки глибока! Тому Little Cyan Fish вирішує, що ця його перестановка буде випадково згенерована таким чином:

  • Згенерувати випадкову перестановку $p_1, p_2, \dots, p_n$: вона вибирається рівноймовірно з усіх $n!$ можливих перестановок чисел від $1$ до $n$.
  • Якщо $p_1 > p_n$, то розвернути всю перестановку у зворотному порядку.

Ви не можете безпосередньо спостерігати структуру перестановки, але Little Cyan Fish подарував вам суперздібність: ставити запитання! Щоразу ви можете інтерактивно запитати значення відстані між двома числами в перестановці за модулем $3$. А саме, щоразу ви можете вибрати два числа $u, v$ ($1 \le u, v \le n$, $u \ne v$), і перестановка повідомить вам значення відстані між цими двома числами за модулем $3$ (тобто, знайшовши два індекси $i, j$, що задовольняють $p_i = u, p_j = v$, перестановка відповість $|i - j| \bmod 3$).

Тепер Little Cyan Fish хоче, щоб ви спробували й подивилися, що у вас вийде. Вам потрібно допомогти Little Cyan Fish визначити цю перестановку не більше ніж за $25n$ запитів.

Вхідні дані

Є декілька наборів вхідних даних. Перший рядок вхідних даних містить одне ціле число $T$ ($1 \le T \le 1000$), що вказує на кількість наборів вхідних даних.

У кожному наборі вхідних даних спочатку вам потрібно зчитати одне ціле число $n$ ($3 \le n \le 10^4$).

Протокол взаємодії

Далі починається взаємодія. У кожному наборі вхідних даних ви можете зробити не більше $25n$ запитів. Щоб зробити запит, вам потрібно вивести один рядок ? u v ($1 \le u, v \le n$, $u \ne v$), що описує запит. Потім вам потрібно зчитати результат зі стандартного потоку введення.

Щоб надати відповідь, вам потрібно вивести ! p1 p2 ... pn. Ваш вивід повинен задовольняти умову $p_1 < p_n$. Виведення відповіді не враховується в обмеження у $25n$ запитів. Після виведення відповіді вам потрібно негайно перейти до зчитування наступного набору вхідних даних або негайно завершити програму.

Після виведення запиту не забудьте вивести символ нового рядка та скинути буфер виведення (flush). Для цього ви можете використовувати fflush(stdout) або cout.flush() у C++, System.out.flush() у Java, flush(output) у Pascal та stdout.flush() у Python.

Гарантується, що сума $n$ за всіма наборами вхідних даних не перевищує $10^4$.

У цій задачі гарантується, що інтерактор є неадаптивним. Тобто перестановки визначаються випадковим чином, як зазначено в умові задачі, до початку процесу взаємодії. Вони не змінюватимуться залежно від ваших запитів. Усього є $30$ тестів (включно з прикладом).

Приклад

Вхідні дані 1

2
3
2
1
1
4
1
1
1
0
2

Вихідні дані 1

? 1 2
? 2 3
? 1 3
! 1 3 2
? 2 3
? 3 1
? 1 4
? 2 4
? 2 1
! 2 3 1 4

Примітка

problem_18002_1.png

Рисунок 1: Little Cyan Fish та <?> у <?>, знято 4 березня 2026 року

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.