#CF2130C. 双重视角

双重视角

C. 双重视角

  • 每个测试的时间限制:2 秒
  • 内存限制:256 MB

对于一个由若干对 (ai,bi)(a_i, b_i) 构成的集合 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 mai<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) 等于满足以下条件的整数 xx 的个数:存在某个 ii1im1 \le i \le m),使得 [x,x+1][ai,bi][x, x+1] \subseteq [a_i, b_i]

• 将每个 (ai,bi)(a_i, b_i) 视为图中一条无向边g(S)g(S) 表示位于至少一个长度 3\ge 3 的简单环上的节点个数。形式化地说,g(S)g(S) 等于满足以下条件的节点 x1x_1 的个数:存在一条路径 x1x2xkx1x_1 \to x_2 \to \dots \to x_k \to x_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') 的值最大。你需要输出所选对的下标


输入格式

每个测试点包含多个测试用例。第一行包含测试用例数 tt1t1041 \le t \le 10^4)。

每个测试用例的第一行包含一个整数 nn1n3×1031 \le n \le 3 \times 10^3)。

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

保证同一测试用例内的所有对都是不同的。

保证所有测试用例的 n2n^2 之和不超过 9×1069 \times 10^6


输出格式

对于每个测试用例:

  • 第一行输出一个整数 kk0kn0 \le k \le n)—— 所选子集 SS' 的大小。
  • 第二行输出 kk 个整数 i1,i2,,iki_1, i_2, \dots, i_k1ijn1 \le i_j \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。因此最优解是选第一个对。