跳转至

E1. Interactive Graph (Simple Version)

E1. Interactive Graph (Simple Version)

时间限制:每个测试点2秒
内存限制:每个测试点256兆字节

问题描述

这是本题的简单版本。两个版本的区别在于:在本版本中,你可以询问不超过 32 \cdot (n + m) 次问题,且 n \le 15。只有当你解决了本题的所有版本时,才可以进行攻击(Hack)。

这是一个交互式问题。

评测系统构想了一个无环、无重边的有向图,该图有 n 个顶点和 m 条边。

你的任务是确定这个图中有哪些边。为此,你可以提出如下形式的问题:在图的所有路径的字典序* 排序列表中,第 k 条路径是什么?

图中的一条路径是一个顶点序列 u_1, u_2, \ldots, u_l,使得对于任意 i < l,图中存在边 (u_i, u_{i+1})

你的目标是在不超过 32 \cdot (n + m) 次询问内完成此任务。

  • 序列 a 字典序小于序列 b 当且仅当满足以下条件之一:
  • ab 的前缀,但 a \ne b;或
  • ab 第一个不同的位置上,a 的元素小于 b 的对应元素。

输入格式

每个测试包含多个测试用例。第一行包含一个整数 t,表示测试用例的数量(1 \le t \le 10)。
接下来是每个测试用例的描述。

每个测试用例由单独一行组成,包含一个整数 n1 \le n \le 15)——图中顶点的数量。

评测系统保证给定的图不包含环或重边。

注意:m 对你来说是未知的。

交互格式

对于每个测试用例,交互过程从读取整数 n 开始。

之后你可以提出最多 32 \cdot (n + m) 次询问。

询问方式:输出格式为 "? k"(不含引号),其中 1 \le k \le 2^{30}
每次询问后,你需要读取一个整数 q —— 第 k 条路径的顶点数。
- 如果 q = 0,则表示该路径不存在;
- 否则,再读取 q 个整数,表示构成这条路径的顶点编号。

可以证明,在给定约束下,图中不同的路径总数不超过 2^{30}

回答答案:首先输出格式为 "! m" 的字符串,然后输出 m 行,每行格式为 "u v",表示存在一条从 uv 的有向边。你可以按任意顺序输出这些边。输出答案不计入询问次数。

每次询问后,不要忘记输出换行并刷新缓冲区。否则,你将收到“Idleness limit exceeded”的判决。

如果在任何交互步骤中,你读取到 -1 而非有效数据,你的解决方案必须立即退出。这意味着你的解决方案将因无效查询或其他错误而被判“Wrong answer”。未能及时退出可能导致任意判决,因为你的解决方案将继续从已关闭的流中读取数据。

攻击(Hack)格式

对于攻击,请使用以下格式:

第一行包含一个整数 t1 \le t \le 10)——测试用例数量。

每个测试用例的第一行包含两个整数 n, m1 \le n \le 150 \le m \le \frac{n \cdot (n-1)}{2})——顶点数和边数。

接下来的 m 行包含边的描述。每条边由两个整数 v, u1 \le v, u \le nv \ne u)定义,表示从 vu 的一条有向边。

该图不能包含环或重边。

交互示例

输入示例:

3
5

1 1

2 1 2

3 1 2 4

3 1 2 5

2 1 3

3 1 3 4

3 1 3 5

1 2

1 3

1 4

1 5

1

0

2

1 1

1 2

2 2 1

输出示例:

? 1

? 2

? 3

? 4

? 5

? 6

? 7

? 8

? 11

? 14

? 15

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

? 2

! 0

? 1

? 2

? 3

! 1
2 1

样例说明

(本交互示例展示了三个测试用例的完整交互过程,具体图结构请参考原题。)

Note

The graph for the first test case.

In this graph, there are 15 paths, which are arranged in lexicographic order as follows:

  • 1
  • 1 \to 2
  • 1 \to 2 \to 4
  • 1 \to 2 \to 5
  • 1 \to 3
  • 1 \to 3 \to 4
  • 1 \to 3 \to 5
  • 2
  • 2 \to 4
  • 2 \to 5
  • 3
  • 3 \to 4
  • 3 \to 5
  • 4
  • 5