爆瓶子
题号:NC19863
时间限制:C/C++/Rust/Pascal 4秒,其他语言8秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

小t又发现了一个有趣的游戏--爆瓶子。伟大的小t发现不止冰露的瓶子可以爆,一切瓶子都是可以爆的。小m和小s感觉这很有意思,于是也加入了游戏。
为了可以愉快的爆瓶子,他们决定将瓶子排成一个矩形。已知他们有n种瓶子并且每种瓶子都有n个,为了好看要求每行每列都不能有种类相同的瓶子。热爱劳动的小t已经摆好了m行,请你帮助他们完成剩下n-m行的摆设。由于小m是毒瘤,他要求你输出字典序最小的方案。注意瓶子的种类是按1~n排的。

注意矩阵的字典序是这样定义的:

如果有矩阵a1 a2 a3

                 a4 a5 a6

则它的字典序相当于a1 a2 a3 a4 a5 a6的字典序。


输入描述:

输入T表示有T组数据
对于每组数据
输入n和m,n和m的意义见题面。
之后m行每行n个数,表示某个位置上的瓶子的种类

输出描述:

对于每组数据输出字典序最小的方案
示例1

输入

复制
2
3 2
3 2 1
1 3 2
4 2
1 4 3 2
2 1 4 3

输出

复制
2 1 3
3 2 1 4
4 3 2 1

备注:

对于20%的数据1<=m<=n<=5

对于40%的数据1<=m<=n<=15

对于100%的数据1<=m<=n<=220,T<=3