#P10062. [SNOI2024] 拉丁方

    ID: 9492 Type: RemoteJudge 5000ms 1024MiB Tried: 0 Accepted: 0 Difficulty: 7 Uploaded By: Tags>各省省选2024Special JudgeO2优化陕西

[SNOI2024] 拉丁方

题目描述

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

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

输入格式

多组测试数据,第一行一个整数 TT 表示测试数据组数。
对于每组测试数据,第一行三个整数 n,R,Cn, R, C 表示矩阵大小和已知的矩阵大小。
接下来 RR 行,每行 CC 个数,其中第 ii 行的第 jj 个数表示 Ai,jA_{i, j}

输出格式

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

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 解释】

在第一个样例中,对于第二组数据,根据前两行可以发现,A1,3=A2,3=3A_{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,这个样例满足测试点 676 \sim 7 的条件限制。


【样例 #3】

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


【数据范围】

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

具体如下:

测试点编号 nn \le 特殊性质
121 \sim 2 66
343 \sim 4 1010
55 500500 A
676 \sim 7 100100 B
898 \sim 9 300300
1010 500500
111211 \sim 12 C
131413 \sim 14 100100
151615 \sim 16 300300
172017 \sim 20 500500

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