9551 - 拉丁方

通过次数

0

提交次数

0

时间限制 : 5 秒
内存限制 : 1024 MB

我们定义一个 n \times n 的矩阵 A 为拉丁方,当且仅当,每行每列都是一个 1 \sim n 的排列。

现在给你一个矩阵 A 左上角的一个 R \times C 的子矩阵,也就是 A_{i, j}1 \le i \le R1 \le j \le C)。问能不能将剩下的位置填上数使得它是一个拉丁方。

输入

多组测试数据,第一行一个整数 T 表示测试数据组数。
对于每组测试数据,第一行三个整数 n, R, C 表示矩阵大小和已知的矩阵大小。
接下来 R 行,每行 C 个数,其中第 i 行的第 j 个数表示 A_{i, j}

输出

对于每组数据,第一行输出一个字符串 Yes 或者 No,表示能否找到满足条件的拉丁方。
如果能找到满足条件的拉丁方,那么在接下来 n 行,每行输出 n 个数,表示一个满足条件的拉丁方。如果有多组满足条件的方案,输出任意一种即可。

样例

输入

3
2 1 1
1
3 2 2
1 2
2 1
5 2 3
1 2 3
4 3 2

输出

Yes
1 2
2 1
No
Yes
1 2 3 4 5
4 3 2 5 1
2 4 5 1 3
3 5 1 2 4
5 1 4 3 2

提示

【样例 #1 解释】

在第一个样例中,对于第二组数据,根据前两行可以发现,$A{1, 3} = A{2, 3} = 3$,所以不存在满足条件的拉丁方。

对于第三组数据,可以发现输出是一个满足条件的拉丁方,并且左上角是输入的矩阵。下面也是一个满足条件的方案。 \begin{bmatrix} 1 & 2 & 3 & 5 & 4 \ 4 & 3 & 2 & 1 & 5 \ 3 & 5 & 1 & 4 & 2 \ 2 & 4 & 5 & 3 & 1 \ 5 & 1 & 4 & 2 & 3 \end{bmatrix}

【样例 #2】

见附件中 latin/latin2.inlatin/latin2.ans,这个样例满足测试点 6 \sim 7 的条件限制。

【样例 #3】

见附件中 latin/latin3.inlatin/latin3.ans,这个样例满足测试点 11 \sim 12 的条件限制。

【数据范围】

对于所有的数据,保证 1 \le T \le 101 \le n \le 5001 \le R, C \le n1 \le A_{i, j} \le n,保证输入的子矩阵不存在一行或者一列有两个相同的数。

具体如下:

测试点编号n \le特殊性质
1 \sim 26
3 \sim 410
5500A
6 \sim 7100B
8 \sim 9300B
10500B
11 \sim 12500C
13 \sim 14100
15 \sim 16300
17 \sim 20500

特殊性质 A:保证 R = 1
特殊性质 B:保证 C = n
特殊性质 C:保证 R, C \le \frac{n}{2}

来源

陕西省选