当然,这是一个问题。
这是一个交互式问题。给你一个含有 $n$ 个顶点和 $m$ 条边的未知无向图,图中没有重边或自环。每次你可以向交互库提出以下问题:
- 给定一个顶点集合 $S \subseteq \{1, 2, \dots, n\}$,询问该顶点集合是否是一个独立集。
这里,独立集意味着集合 $S$ 中任意两个不同的顶点之间都没有边相连。
你的目标是使用不超过 $M = n + m(2 + \lceil\log_2 n\rceil)$ 次询问来确定该图的整个边集。
请注意,你事先并不知道 $m$ 的值,且交互库是自适应的(adaptive),即图在开始时并不是固定的,而是会根据你的询问动态调整。
输入格式
第一行包含一个整数 $T$ ($1 \le T \le 100$),表示测试用例的数量。
对于每个测试用例,一行包含一个整数 $n$ ($1 \le n \le 500$),表示该未知无向图的顶点数。
保证所有测试用例中 $n$ 的总和不超过 $500$,$0 \le m \le 500$,且 $m$ 的总和不超过 $500$。
交互
当你需要进行询问时,输出一行:
? k v_1 v_2 ... v_k
其中 $k$ 表示顶点集合的大小,$v_1, v_2, \dots, v_k$ 是你所询问的集合中的顶点编号,它们两两不同。
交互库将返回一个整数:如果该顶点集合是独立集,则返回 $1$;否则返回 $0$。
当你确定了图中的所有边时,输出一行:
! m u_1 v_1 u_2 v_2 ... u_m v_m
其中 $m$ 是无向图中的边数,$(u_i, v_i)$ 表示图中的一条边。你可以以任意顺序输出这些边。
在此之后,如果没有剩余的测试用例,你的程序必须立即终止;否则,它应该继续处理下一个测试用例。
样例
输入样例 1
1 4 0 1 0 0 1 0
输出样例 1
? 2 1 2 ? 2 1 3 ? 2 1 4 ? 2 2 3 ? 2 2 4 ? 2 3 4 ! 4 1 2 2 3 3 4 1 4
说明
样例展示了逐个询问每条边是否存在的交互过程。