Universal Cup Judging System

Universal Cup

Time Limit: 2.0 s Memory Limit: 2048 MB Total points: 100 Difficulty: [show] Communication
Statistics

Це багатопрохідна задача.

У цифрових архівах Ківотоса Плана виявила колекцію загадкових записів, відомих як Бітемпоральні Логи. Кожен лог складається з $n$ записів, пронумерованих від $1$ до $n$, які утворюють кореневе дерево. Проте структурні обмеження відрізняються залежно від того, чи є часовий потік ретроспективним (Логіка A), чи перспективним (Логіка B):

  • Логіка A: Корінь дерева знаходиться в записі $1$; кожен інший запис $i$ має предка $p_i$, такого що $p_i < i$.
  • Логіка B: Корінь дерева знаходиться в записі $n$; кожен інший запис $i$ має предка $q_i$, такого що $q_i > i$.

Щоб проаналізувати структурні властивості, Плана визначає два типи записів:

  • Термінал (Terminal): Запис, який не є предком для жодного іншого запису.
  • Вузол (Hub): Запис, який є предком для щонайменше одного іншого запису.

Плана помітила ідеальну симетрію, названу Логічним резонансом (Logical Resonance). Ця властивість виконується між логом Логіки A та логом Логіки B тоді й лише тоді, коли:

$$\text{For every } i\text{, entry } i \text{ is a Terminal in Logic A} \iff \text{entry } i \text{ is a Hub in Logic B.}$$

Плана математично довела, що кількість коректних логів Логіки A та логів Логіки B за цього обмеження є однаковою. Тепер вона доручає вам розробити Універсальний Протокол Перекладу — бієкцію — для перетворення одного формату логів на інший.

Оцінювання правильності

Ваш розв'язок запускається двічі на кожному тесті. У першому запуску ваш розв'язок має перетворити кожен лог Логіки A на лог Логіки B, що задовольняє умову Логічного резонансу. У другому запуску за даним логом Логіки B, отриманим під час вашого першого запуску, ваш розв'язок повинен точно відновити початковий лог Логіки A.

Вхідні дані другого запуску складаються з тих самих логів Логіки B, які ваш розв'язок вивів у першому запуску, можливо, в іншому порядку. Для кожного вхідного лога Логіки B у другому запуску вам потрібно вивести відповідний йому лог Логіки A. Ваш розв'язок вважається правильним, якщо для кожного такого лога Логіки B ваш вивід точно збігається з тим логом Логіки A, з якого його було згенеровано в першому запуску.

Для допомоги в розробці та тестуванні вашого розв'язку надається інструмент тестування.

Вхідні дані

Перший рядок вхідних даних містить два цілі числа $r$ ($r \in \{1, 2\}$) і $T$ ($1 \le T \le 10^5$), що позначають номер запуску та кількість наборів вхідних даних.

Для кожного набору вхідних даних перший рядок містить ціле число $n$ ($2 \le n \le 10^3$).

Якщо $r = 1$, другий рядок містить $n$ цілих чисел $p_1, p_2, \dots, p_n$, що представляють лог Логіки A. Гарантується, що $p_1 = 0$, а для $2 \le i \le n$ виконується $1 \le p_i < i$ — номер запису, до якого приєднано запис $i$. Тут ми використовуємо $0$, щоб позначити, що запис не має предка (тобто є коренем).

Інакше, якщо $r = 2$, другий рядок містить $n$ цілих чисел $q_1, q_2, \dots, q_n$, що представляють лог Логіки B. Гарантується, що $q_n = 0$, а для $1 \le i \le n - 1$ виконується $i < q_i \le n$ — номер запису, до якого приєднано запис $i$.

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

Вихідні дані

Якщо $r = 1$, для кожного набору вхідних даних виведіть через пробіл $n$ цілих чисел $q_1, q_2, \dots, q_n$, що представляють перетворений лог Логіки B. Має виконуватися $q_n = 0$, а для $1 \le i \le n - 1$ — нерівність $i < q_i \le n$. Також має виконуватися властивість Логічного резонансу: запис $i$ є Терміналом у Логіці A тоді й лише тоді, коли запис $i$ є Вузлом у Логіці B.

Інакше, якщо $r = 2$, для кожного набору вхідних даних виведіть через пробіл $n$ цілих чисел $p_1, p_2, \dots, p_n$, що представляють відновлений лог Логіки A.

Приклад

Приклад 1, Прохід 1

Вхідні дані
1 3
4
0 1 1 2
4
0 1 2 1
4
0 1 1 1
Вихідні дані
3 3 4 0
3 4 4 0
2 3 4 0

Приклад 1, Прохід 2

Вхідні дані
2 3
4
2 3 4 0
4
3 3 4 0
4
3 4 4 0
Вихідні дані
0 1 1 1
0 1 1 2
0 1 2 1

Пояснення до прикладу 1

Можливу коректну бієкцію показано нижче.

problem_16339_5fc56a9536f47de069054071a1fe22c7.png

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.