#P12114. [NWRRC2024] Just Half is Enough

[NWRRC2024] Just Half is Enough

Description

Jacob 正在学习图论。今天他了解到,有向图的 拓扑排序 是指对图中顶点的一个线性排序,使得对于图中的每一条有向边 (u,v)(u, v)uu 在排序中总是位于 vv 之前。

众所周知,拓扑排序仅适用于无环图。那么我们如何将这个概念推广到任意图呢?

Jacob 提出了 半拓扑排序 的概念:图的顶点的一个线性排序,使得 至少一半 的有向边 (u,v)(u, v) 满足 uu 在排序中位于 vv 之前。

换句话说,如果图有 mm 条边,对于某个排序,有 kk 条边满足上述条件,则当 km2k \ge \lceil \frac{m}{2} \rceil 时,该排序被称为 半拓扑排序

请帮助 Jacob 找出给定图的任意一个半拓扑排序,或者报告不存在这样的排序。

Input Format

每个测试包含多个测试用例。第一行包含测试用例数量 tt1t1041 \le t \le 10^4)。接下来是各测试用例的描述。

每个测试用例的第一行包含两个整数 nnmm,分别表示图中的顶点数和边数(2n1052 \le n \le 10^51m21051 \le m \le 2 \cdot 10^5)。

接下来的 mm 行中,第 ii 行包含两个整数 uiu_iviv_i,描述一条从顶点 uiu_i 到顶点 viv_i 的有向边(1ui,vin1 \le u_i, v_i \le nuiviu_i \ne v_i)。图中不包含重边:每条有向边 (u,v)(u, v) 最多出现一次。但是,同时存在边 (u,v)(u, v)(v,u)(v, u) 是允许的。

保证所有测试用例的 nn 之和不超过 10510^5mm 之和不超过 21052 \cdot 10^5

Output Format

对于每个测试用例,如果不存在满足条件的半拓扑排序,则输出单个整数 1-1

否则,输出 nn 个不同的整数 p1,p2,,pnp_1, p_2, \ldots, p_n,表示图的排序(1pin1 \le p_i \le n)。对于至少 m2\lceil \frac{m}{2} \rceil 条边 (ui,vi)(u_i, v_i),整数 uiu_i 必须位于整数 viv_i 之前。如果有多个解,输出任意一个即可。

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