题目描述
有一个长度为 m 的序列 A,所有元素均为 0。接下来我们将依次对 A 执行 n 个操作。第 i 个操作可记为 pi 个不同的整数 bi,1,bi,2,⋯,bi,pi,表示对于所有 1≤j≤pi,我们将把序列中第 bi,j 个元素的值改为 i。令 R 表示所有操作后的结果序列。
我们现在要求您重新排列这些操作,但保持最终的结果不变。更正式地,令 q1,q2,⋯,qn 表示一个 n 的排列,且与 1,2,⋯,n 不同。您将会依次对序列 A 执行第 q1,q2,...,qn 个操作,最终的结果序列必须和 R 相同。您的任务就是找到这样的排列,或表明其不存在。
请回忆:一个 n 的排列是一个长度为 n 的序列,每个从 1 到 n(含两端)的整数在其中都恰好出现一次。令 x1,x2,⋯,xn 和 y1,y2,⋯,yn 为两个 n 的排列,我们称它们是不同的,若存在整数 k 满足 1≤k≤n 且 xk=yk。
输入格式
有多组测试数据。第一行输入一个整数 T 表示测试数据组数,对于每组测试数据:
第一行输入两个整数 n 和 m(1≤n,m≤105)表示操作的数量和序列的长度。
对于接下来 n 行,第 i 行首先输入一个整数 pi(1≤pi≤m)表示第 i 个操作修改的元素数量。接下来输入 pi 个不同的整数 bi,1,bi,2,⋯,bi,pi(1≤bi,j≤m)表示被修改的元素下标。
保证所有数据 (n+m) 之和不超过 2×106,且所有数据 pi 之和不超过 106。
输出格式
对于每组测试数据:
如果存在所求的排列,首先输出一行 Yes。接下来在第二行输出 n 个由单个空格分隔的整数 q1,q2,⋯,qn 表示答案。如果有多种合法答案,您可以输出任意一种。
如果不存在所求的排列,仅需输出一行 No。
请不要在行末输出多余空格,否则您的答案可能会被认为是错误的!
3
3 6
3 3 1 5
2 5 3
2 2 6
2 3
3 1 3 2
2 3 1
1 3
2 2 1
Yes
3 1 2
No
No
提示
对于第一组样例数据,按 {1,2,3} 或 {3,1,2} 的顺序执行操作,结果序列均为 {1,3,2,0,2,3}。