#P13619. [ICPC 2024 APC] Duplicates

[ICPC 2024 APC] Duplicates

题目描述

我们称一个数字序列含有重复元素,如果序列中存在出现一次以上的元素。形式化地讲,一个序列 (a1,,an)(a_1, \dots, a_n) 含有重复元素,如果存在两个不等的下标 iijj 使得 ai=aja_i = a_j

给定一个 n×nn \times n 的矩阵 XXXX 中的每个元素都是一个 11nn 之间(含两端)的整数。你可以将 XX 中零个或多个元素修改为 11nn 之间(含两端)的任意整数。不同的元素可以修改为不同的整数。

你的任务是通过修改 XX 中的元素,使得以下所有条件都成立:

  • 对于每一行 ii,序列 (Xi1,Xi2,,Xin)(X_{i1}, X_{i2}, \dots, X_{in}) 含有重复元素。
  • 对于每一列 jj,序列 (X1j,X2j,,Xnj)(X_{1j}, X_{2j}, \dots, X_{nj}) 含有重复元素。

你需要计算达成此目标所需的最小修改次数。同时,找出一种可行的修改方案。对于每次修改,你需要指明修改的是哪个元素以及它的新值。请注意,当给定的矩阵 XX 已经满足上述条件时,所需的最小修改次数可以为零。

输入格式

输入的第一行包含一个整数 tt1t10001 \le t \le 1000),代表测试用例的数量。之后是 tt 个测试用例。每个测试用例的格式如下。

一个测试用例的第一行包含一个整数 nn3n1003 \le n \le 100)。 接下来的 nn 行,每行包含 nn 个整数。第 ii 行的第 jj 个整数代表 XijX_{ij}1Xijn1 \le X_{ij} \le n)。

在单个输入文件中,所有测试用例的 n2n^2 的总和不超过 10,00010,000

输出格式

对于每个测试用例,按以下格式输出一组修改方案。

第一行输出一个整数 mm,代表需要修改的元素的最小数量。 在接下来的 mm 行中,每行输出三个整数 i,j,vi, j, v。这代表一次修改,即将元素 XijX_{ij} 的值修改为 vv。这三个整数都必须在 11nn 之间(含两端)。

如果存在多种解法,你可以输出其中任意一种。

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

提示

样例解释 #1

在第一个测试用例中,修改后的矩阵如下所示。

$$\begin{bmatrix} 3 & 2 & 1 & 1 \\ 1 & 1 & 3 & 4 \\ 1 & 3 & 3 & 1 \\ 4 & 3 & 4 & 2 \\ \end{bmatrix} $$