#P16889. [SPOJ 2142]Arranging Flowers

[SPOJ 2142]Arranging Flowers

题目描述

有一个由鲜花组成的矩形网格,共有 N 列,并使用 N 种不同的花,花的种类编号为 1,2,...,N

当前网格已经有 M 行,并满足:

  • 每一行恰好包含每一种花一次,因此每一行都是 1..N 的一个排列;
  • 每一列中,同一种花至多出现一次。

你不能修改已有的行,也不能引入新的花种。

现在希望继续在网格下方添加若干行,并始终保持上面的两个条件。

请添加尽可能多的行。

如果存在多种最多行的方案,则必须输出按行依次连接后,字典序最小的方案。

换句话说,先比较新增的第一行;若第一行相同,再比较第二行;依此类推。每一行内部也按从左到右的顺序比较。

输入格式

第一行一个整数 T,表示测试用例数量。

每组测试数据第一行包含两个正整数 NM

  • 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 的排列;
  • 每一列没有重复花种;