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.