Little Cyan Fish 热爱 DFS 序。今天他再次研究起了 DFS 序,不过这次是在无向简单图上,而不是有根树上。
给定一个包含 $n$ 个顶点(编号为 $1$ 到 $n$)的连通无向简单图 $G$ 以及一个起始顶点 $s$。$G$ 从 $s$ 开始的 DFS 序是按照下述深度优先搜索算法首次访问顶点的顺序;当有多个邻居可选时,总是优先访问标签最小的未访问邻居,因此 DFS 序是唯一的。
算法 1 本题使用的 DFS 序算法
1: procedure DFS(vertex x)
2: Mark x as visited
3: Append x to the end of dfs_order
4: for each vertex y adjacent to x in G, in ascending order of label do
5: if y is not yet visited then
6: DFS(y)
7: end if
8: end for
9: end procedure
10:
11: procedure GENERATE(G, vertex s)
12: Mark all vertices as unvisited
13: Let dfs_order be an empty list
14: DFS(s)
15: return dfs_order
16: end procedure
一个包含 7 个顶点和 7 条边的图。从顶点 1 开始的 DFS 序为 [1, 2, 3, 7, 4, 5, 6]。
Little Cyan Fish 准备了 $n$ 个 $1$ 到 $n$ 的排列 $a_1, a_2, \dots, a_n$。每个 $a_i = [a_{i,1}, a_{i,2}, \dots, a_{i,n}]$ 都是他声称的从顶点 $i$ 开始的 DFS 序。
请重构任意一个包含顶点 $1, 2, \dots, n$ 的连通无向简单图 $G$,使得从每个起始顶点 $i$ 开始的 DFS 序都等于 $a_i$,或者确定不存在这样的图。
输入格式
输入包含多组测试数据。第一行包含一个整数 $T$ ($1 \le T$),表示测试数据的组数。
对于每组测试数据,第一行包含一个整数 $n$ ($1 \le n \le 200$)。接下来的 $n$ 行,每行包含 $n$ 个整数;第 $i$ 行包含 $a_{i,1}, a_{i,2}, \dots, a_{i,n}$ ($1 \le a_{i,j} \le n$),这是 Little Cyan Fish 声称的从顶点 $i$ 开始搜索时产生的 DFS 序。保证 $a_{i,1} = i$,且每一行 $a_i$ 都是 $1, 2, \dots, n$ 的一个排列。
保证所有测试数据的 $n^2$ 之和不超过 $4 \times 10^4$。
输出格式
对于每组测试数据,如果不存在合适的图,输出一行 “No”。
否则,第一行输出 “Yes”。下一行输出一个整数 $m$ ($n - 1 \le m \le \frac{n(n-1)}{2}$),表示图中边的数量。
接下来的 $m$ 行,每行包含两个整数 $u$ 和 $v$ ($1 \le u, v \le n, u \neq v$),表示顶点 $u$ 和 $v$ 之间的一条无向边。所构成的图必须是简单且连通的,且从每个顶点 $i$ 开始的 DFS 序必须等于 $a_i$。
如果存在多个满足要求的图,输出其中任意一个即可。
样例
样例输入 1
2 3 1 2 3 2 1 3 3 2 1 3 1 2 3 2 3 1 3 1 2
样例输出 1
Yes 2 1 2 2 3 No
说明 1
在第一组测试数据中,路径 $1-2-3$ 是一个合法的图:从顶点 $1, 2, 3$ 开始的 DFS 序分别为 $[1, 2, 3], [2, 1, 3]$ 和 $[3, 2, 1]$。在第二组测试数据中,不存在合适的图。