Universal Cup Judging System

Universal Cup

Time Limit: 2.0 s Memory Limit: 1024 MB Total points: 100 Hackable ✓
Statistics

Дано цілі числа $n, m > 0$, а також цілі числа $a_1, a_2, \dots, a_n \in \{-1, 0, 1, \dots, m - 1\}$. Побудуйте дерево $T$ з $n$ вершинами $V = \{v_1, v_2, \dots, v_n\}$, що задовольняє таку умову: для кожної вершини $v_i$, де $a_i \ne -1$, остача від ділення степеня $\deg_T(v_i)$ на $m$ повинна дорівнювати $a_i$. Якщо $a_i = -1$, то обмежень на степінь вершини $v_i$ немає.

Вхідні дані

Перший рядок вхідних даних містить ціле число $t$ — кількість наборів вхідних даних ($1 \le t \le 5 \cdot 10^5$). Для кожного набору вхідних даних:

Перший рядок містить два цілі числа $n$ і $m$, що позначають кількість вершин у дереві та модуль ($1 \le n \le 5 \cdot 10^5$; $1 \le m \le 2 \cdot 10^9$).

Наступний рядок містить $n$ цілих чисел $a_1, a_2, \dots, a_n$, що позначають необхідні остачі ($-1 \le a_i < m$).

Сума $n$ за всіма наборами вхідних даних не перевищує $5 \cdot 10^5$.

Вихідні дані

Для кожного набору вхідних даних, якщо таке дерево з $n$ вершинами існує, виведіть «YES» (у будь-якому регістрі), а потім $n - 1$ рядків по два цілі числа в кожному, що позначають кінці кожного ребра. Інакше виведіть «NO» (у будь-якому регістрі).

Приклад

Вхідні дані

6
1 5
0
2 3
1 1
5 4
0 1 1 1 1
6 2
1 0 0 0 0 1
3 2
1 1 1
4 10
3 3 1 1

Вихідні дані

YES
YES
1 2
YES
1 2
1 3
1 4
1 5
YES
1 2
2 3
3 4
4 5
5 6
NO
NO

Примітка

У першому наборі вхідних даних потрібно побудувати дерево з $n = 1$ вершиною, $m = 5$ та масивом остач степенів $b = [0]$. Маючи лише одну вершину, ребер бути не може, тому існує рівно одне можливе дерево: єдина вершина степеня $0$. Оскільки $0 \bmod 5 = 0$, умова виконується, отже відповідь — «YES».

У другому наборі вхідних даних потрібне дерево на $n = 2$ вершинах із $m = 3$ та остачами $b = [1, 1]$, що означає, що обидва степені мають бути конгруентними $1$ за модулем $3$. На двох вершинах існує лише одне дерево: єдине ребро $1-2$. Його степені дорівнюють $(1, 1)$, і справді $1 \bmod 3 = 1$, тому відповідь — «YES», а виведення «1 2» є коректним.

У третьому наборі вхідних даних нам потрібні $n = 5$, $m = 4$ з остачами $b = [0, 1, 1, 1, 1]$: перша вершина повинна мати степінь, кратний $4$, тоді як інші чотири вершини повинні мати $\text{degree} \equiv 1 \pmod 4$. Природною конструкцією є зірка з центром у вершині $1$: з'єднаємо $1$ з усіма іншими вершинами. Тоді $\deg(1) = 4$ і $4 \bmod 4 = 0$, тоді як кожна з вершин $2, 3, 4, 5$ має степінь $1$ і $1 \bmod 4 = 1$. Отже, відповідь — «YES», і ребра «1 2», «1 3», «1 4», «1 5» підходять.

У четвертому наборі вхідних даних потрібне дерево з $n = 6$, $m = 2$, остачами $b = [1, 0, 0, 0, 0, 1]$, тобто кінцеві вершини повинні мати непарний степінь, а чотири середні вершини — парний степінь. За модулем $2$ це суто умова парності. Простий шлях $1-2-3-4-5-6$ ідеально підходить: вершини $1$ і $6$ мають степінь $1$ (непарний), а вершини $2, 3, 4, 5$ мають степінь $2$ (парний). Отже, відповідь — «YES», і ребра шляху правильні.

У п'ятому наборі вхідних даних потрібно побудувати граф (і, зокрема, дерево) на $n = 3$ з $m = 2$ та $b = [1, 1, 1]$, тому кожна вершина повинна мати непарний степінь. Це неможливо: у будь-якому неорієнтованому графі кількість вершин непарного степеня завжди парна, тому три непарні степені не можуть утворитися для жодної множини ребер. Отже, вердикт — «NO».

У шостому наборі вхідних даних маємо $n = 4$, $m = 10$, $b = [3, 3, 1, 1]$. Оскільки $m > n - 1 = 3$, остача за модулем $10$ дорівнює самому степеню, тому вимагається рівно $\deg = [3, 3, 1, 1]$. Це змушує дві вершини бути суміжними з усіма іншими (степінь $3$ у графі з $4$ вершинами), а при $n > 2$ будь-яка така пара неминуче утворює цикл разом із будь-якою третьою вершиною. Дерево не може містити циклів, тому вердикт також «NO».

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#1219EditorialOpen题解jianglyView

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.