P13956 [ICPC 2023 Nanjing R] 等价重写

题目描述

有一个长度为 $m$ 的序列 $A$,所有元素均为 $0$。接下来我们将依次对 $A$ 执行 $n$ 个操作。第 $i$ 个操作可记为 $p_i$ 个不同的整数 $b_{i, 1}, b_{i, 2}, \cdots, b_{i, p_i}$,表示对于所有 $1 \le j \le p_i$,我们将把序列中第 $b_{i, j}$ 个元素的值改为 $i$。令 $R$ 表示所有操作后的结果序列。 我们现在要求您重新排列这些操作,但保持最终的结果不变。更正式地,令 $q_1, q_2, \cdots, q_n$ 表示一个 $n$ 的排列,且与 $1, 2, \cdots, n$ 不同。您将会依次对序列 $A$ 执行第 $q_1$,$q_2$,...,$q_n$ 个操作,最终的结果序列必须和 $R$ 相同。您的任务就是找到这样的排列,或表明其不存在。 请回忆:一个 $n$ 的排列是一个长度为 $n$ 的序列,每个从 $1$ 到 $n$(含两端)的整数在其中都恰好出现一次。令 $x_1, x_2, \cdots, x_n$ 和 $y_1, y_2, \cdots, y_n$ 为两个 $n$ 的排列,我们称它们是不同的,若存在整数 $k$ 满足 $1 \le k \le n$ 且 $x_k \ne y_k$。

输入格式

有多组测试数据。第一行输入一个整数 $T$ 表示测试数据组数,对于每组测试数据: 第一行输入两个整数 $n$ 和 $m$($1 \leq n, m \leq 10^5$)表示操作的数量和序列的长度。 对于接下来 $n$ 行,第 $i$ 行首先输入一个整数 $p_i$($1 \le p_i \le m$)表示第 $i$ 个操作修改的元素数量。接下来输入 $p_i$ 个不同的整数 $b_{i,1}, b_{i,2}, \cdots, b_{i,p_i}$($1 \le b_{i,j} \le m$)表示被修改的元素下标。 保证所有数据 $(n + m)$ 之和不超过 $2 \times 10^6$,且所有数据 $p_i$ 之和不超过 $10^6$。

输出格式

对于每组测试数据: 如果存在所求的排列,首先输出一行 $\texttt{Yes}$。接下来在第二行输出 $n$ 个由单个空格分隔的整数 $q_1, q_2, \cdots, q_n$ 表示答案。如果有多种合法答案,您可以输出任意一种。 如果不存在所求的排列,仅需输出一行 $\texttt{No}$。 请不要在行末输出多余空格,否则您的答案可能会被认为是错误的!

说明/提示

对于第一组样例数据,按 $\{1, 2, 3\}$ 或 $\{3, 1, 2\}$ 的顺序执行操作,结果序列均为 $\{1, 3, 2, 0, 2, 3\}$。