这是一个交互式问题。
Panda 是一个富有冒险精神的孩子,他在探索遗迹时意外触发了一个陷阱。该陷阱是一个具有 $N$ 个顶点的正多边形,顶点按逆时针方向依次编号为 $1, 2, \dots, N$。如果他想逃离陷阱,就必须摧毁陷阱的中心(即多边形的重心)。(正多边形是指每条边长度相等且每个内角也相等的凸多边形。)
Panda 不知道多边形的边长,也不清楚自己的确切位置。他可能在正多边形的内部、边界上或外部。他唯一的工具是一种测量方法:他可以选择多边形的任意两个顶点 $a$ 和 $b$,该工具会告诉他由他当前位置与这两个顶点所构成的三角形的面积。时间紧迫,他最多只能进行 5 次测量。你的任务是帮助他计算他当前位置到多边形重心的距离,以便他能召唤火环来摧毁陷阱。
交互
本题包含多组交互测试。首先,你的程序应当从标准输入中读取一个整数 $T$($1 \le T \le 10^4$),表示有 $T$ 组交互测试。
在每组测试开始时,你的程序应当从标准输入中读取一个整数 $N$($4 \le N \le 200$),表示正多边形的顶点数。保证该正多边形的外接圆半径(即多边形重心到任意顶点的距离)是区间 $[1, 100]$ 内的一个实数,且 Panda 的位置到多边形重心的距离(即答案)不超过 $10000$。在每组测试数据中,所有隐藏参数均保持不变,包括多边形的外接圆半径、Panda 的位置以及多边形顶点的确切坐标。
对于测量查询,向标准输出输出一行格式为 ? x y 的内容,其中 $x, y$ 是 $1$ 到 $N$ 之间的两个整数,表示你想要查询的正多边形上的顶点编号。交互系统将返回一个至少有 10 位有效数字的非负实数,表示由这两个顶点和 Panda 的位置所构成的三角形的面积。请注意,如果你的程序进行了超过 5 次查询,交互器将输出一行 -1 并停止交互,你的程序将获得 Wrong Answer。
在最多 5 次查询后,向标准输出输出一行格式为 ! d 的内容以给出答案,其中 $d$ 是一个非负实数,表示 Panda 到正多边形重心的距离。如果你的输出 $p$ 与交互系统计算的标准答案 $q$ 之间的绝对误差或相对误差不超过 $10^{-4}$,即 $\min\left(\frac{|p-q|}{q}, |p-q|\right) \le 10^{-4}$,则你的输出将被视为正确。
在这种情况下,交互器将输出一行 Correct 并继续下一组数据的交互;否则,交互器将输出一行 Wrong 并停止交互,你的程序将获得 Wrong Answer。
说明:每次输出后必须换行,并且必须清空标准输出缓冲区。为了清空缓冲区,你可以:
- 对于 C 或 C++,使用
fflush(stdout)或cout.flush()。 - 对于 Java,使用
System.out.flush()。 - 对于 Python,使用
stdout.flush()。
样例
样例输入 1
1 4 1.000000000 3.000000000 3.000000000 1.000000000 Correct
样例输出 1
? 1 2 ? 2 3 ? 3 4 ? 1 4 ! 1.000000000