#CF2129A. 双重视角

双重视角

对于一组配对 S={(a1,b1),(a2,b2),,(am,bm)}S=\{(a_1,b_1),(a_2,b_2),\dots,(a_m,b_m)\},其中对所有 1im1\le i\le m 均有 ai<bia_i<b_i,我们定义 f(S)f(S)g(S)g(S) 如下:

  • 将每个 (ai,bi)(a_i,b_i) 视为数轴上的线段,f(S)f(S) 为这些线段的并集长度。形式化地,f(S)f(S) 是满足存在某个 ii (1im1\le i\le m) 使得 [x,x+1][ai,bi][x,x+1]\subseteq[a_i,b_i] 的整数 xx 的个数。
  • 将每个 (ai,bi)(a_i,b_i) 视为图中的无向边,g(S)g(S) 是至少出现在一个简单环(包含至少 33 条边)上的节点数目。形式化地,g(S)g(S) 是满足存在一条路径 x1x2xkx1x_1\to x_2\to\dots\to x_k\to x_1 的节点 x1x_1 的个数,其中 k3k\ge 3 且所有 x1,x2,,xkx_1,x_2,\dots,x_k 互不相同。

例如,对于 S={(1,2),(2,4),(1,4),(4,5),(6,7)}S=\{(1,2),(2,4),(1,4),(4,5),(6,7)\},可得到 f(S)=5f(S)=5g(S)=3g(S)=3

给定 nn 个互不相同的配对。你需要从中选出一个子集 SS',使得 f(S)g(S)f(S')-g(S') 最大化。你需要输出所选配对的编号。

输入格式

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

每个测试用例的第一行包含一个整数 nn (1n31031\le n\le 3\cdot 10^3)。

接下来 nn 行,每行包含两个整数 aia_ibib_i (1ai<bi2n1\le a_i<b_i\le 2n),表示一个配对。

保证同一测试用例内的所有配对互不相同。

保证所有测试用例的 n2n^2 之和不超过 91069\cdot 10^6

输出格式

对于每个测试用例,第一行输出一个整数 kk (0kn0\le k\le n) — 所选子集 SS' 的大小。

接下来一行输出 kk 个整数 i1,i2,,iki_1,i_2,\dots,i_k (1i1,i2,,ikn1\le i_1,i_2,\dots,i_k\le n) — 所选配对的编号。注意编号必须互不相同。

样例

输入:

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

输出:

1
1
3
1 2 4

说明

在第一个测试用例中,如果不选任何配对(即 S=S'=\varnothing),则 f(S)g(S)=00=0f(S')-g(S')=0-0=0;若选取第一个配对,则 f(S)g(S)=10=1f(S')-g(S')=1-0=1。因此最优方案是选取第一个配对。