#P15776. 单次交错排序

单次交错排序

题目描述

夏天已经漫长而无聊了,为了打发时间,你开始阅读一些最近的论文。你偶然看到一个有趣的问题:考虑 nn{1,2,,m}\{1,2,\ldots,m\} 上的排列 X1,X2,,XnX^1,X^2,\ldots,X^n。换句话说,每个 XiX^i 都是一个长度为 mm 的向量 X1i,X2i,,XmiX^i_1,X^i_2,\ldots,X^i_m,其中 11mm 的每个数恰好出现一次。

论文研究的是:是否可以重新排列这些给定排列的顺序,使得重新排列后的序列 Y1,Y2,,YnY^1,Y^2,\ldots,Y^nsingle-crossing 的。

称一个排列序列 Y1,Y2,,YnY^1,Y^2,\ldots,Y^nsingle-crossing 的,当且仅当对于任意三个下标

1i<j<kn,1\le i<j<k\le n,

以及任意两个不同的值

1a,bm,1\le a,b\le m,

如果在 YiY^iYkY^k 中,aa 都出现在 bb 的前面,那么在 YjY^j 中,aa 也必须出现在 bb 的前面。

更直观地说,序列 Y1,Y2,,YnY^1,Y^2,\ldots,Y^n 是 single-crossing 的,当且仅当任意两个元素 aabb 的相对顺序在整个序列中至多改变一次。

你已经找不到那篇论文了,但你仍然很想实现论文中提出的问题。给定 tt 组测试数据,请判断每组数据是否存在一种重新排列这些排列的方式,使得得到的序列是 single-crossing 的;如果存在,请输出任意一种方案。

输入格式

第一行包含一个整数 tt,表示测试数据组数。

接下来依次描述 tt 组测试数据。

对于每组测试数据,第一行包含两个整数 n,mn,m

接下来 nn 行,每行包含 mm 个整数,表示排列 X1,X2,,XnX^1,X^2,\ldots,X^n

输出格式

对于每组测试数据,输出一行。

如果无法重新排列这些排列,使得序列变为 single-crossing,则输出 -1

否则,输出一个长度为 nn 的排列 pp,包含 nn 个用空格分隔的整数,表示应按如下顺序重排原来的排列:

Xp1,Xp2,,Xpn.X^{p_1},X^{p_2},\ldots,X^{p_n}.

如果存在多种合法方案,输出任意一种即可。

数据范围

对于所有测试数据,满足:

1t5,1\le t\le 5,

并且对于每组测试数据,满足:

1n105,1\le n\le 10^5, 1nm106.1\le n\cdot m\le 10^6.

每个输入的 XiX^i 都是 {1,2,,m}\{1,2,\ldots,m\} 上的一个排列。

样例

样例输入

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

样例输出

2 3 1 5 4
-1

样例解释

第一组测试数据中,可以按照 2,3,1,5,42,3,1,5,4 的顺序重排原排列,得到:

1 2 3 4
2 1 3 4
2 3 1 4
3 2 4 1
4 3 2 1

该序列是 single-crossing 的。