#P16889. [SPOJ 2142]Arranging Flowers
[SPOJ 2142]Arranging Flowers
题目描述
有一个由鲜花组成的矩形网格,共有 N 列,并使用 N 种不同的花,花的种类编号为 1,2,...,N。
当前网格已经有 M 行,并满足:
- 每一行恰好包含每一种花一次,因此每一行都是
1..N的一个排列; - 每一列中,同一种花至多出现一次。
你不能修改已有的行,也不能引入新的花种。
现在希望继续在网格下方添加若干行,并始终保持上面的两个条件。
请添加尽可能多的行。
如果存在多种最多行的方案,则必须输出按行依次连接后,字典序最小的方案。
换句话说,先比较新增的第一行;若第一行相同,再比较第二行;依此类推。每一行内部也按从左到右的顺序比较。
输入格式
第一行一个整数 T,表示测试用例数量。
每组测试数据第一行包含两个正整数 N 和 M:
N表示列数,同时也是花的种类数;M表示已经存在的行数。
接下来 M 行,每行包含 N 个整数,表示已有的一行花。
保证输入本身满足题目条件。
输出格式
对于每组测试数据:
第一行输出一个整数 K,表示最多还能添加多少行。
随后输出 K 行,每行 N 个整数,表示新增的行。
如果存在多种最优方案,必须输出字典序最小的一种。
样例输入
2
3 2
3 2 1
1 3 2
4 2
1 4 3 2
2 1 4 3
样例输出
1
2 1 3
2
3 2 1 4
4 3 2 1
数据范围
1 <= N <= 220;1 <= M <= N;- 每一行都是
1..N的排列; - 每一列没有重复花种;