考虑欧几里得三维空间中经过原点 $(0; 0; 0)$ 的两组 $n$ 条直线。这里不直接给出直线,而是给出每组中的 $2n$ 个点:$r_i = (x_i, y_i, z_i)$ 和 $r'_j = (x'_j, y'_j, z'_j)$。这些点是直线与单位球面的交点(每条直线对应两个相对的点)。
已知第二组点是由第一组点经过某种绕原点的旋转并打乱顺序后得到的。你需要找到一个排列 $\pi_1, \dots, \pi_{2n}$ 以及三维空间的旋转 $\phi$,使得对于所有 $i$,满足: $$|r_{\pi_i} - \phi(r'_i)| \le 10^{-6}$$
旋转 $\phi$ 应由点 $e = (x, y, z)$ 和角度 $\theta$ 描述。这意味着我们绕着从原点指向点 $e$ 的轴,按照右手定则旋转空间角度 $\theta$(参见说明)。
保证第一组直线的方向是独立且均匀随机选择的。
输入格式
第一行包含一个整数 $n$ ($2 \le n \le 4 \cdot 10^4$)。 接下来的 $2n$ 行,每行包含三个实数 $x_i, y_i, z_i$,描述第一组中的点。 再接下来的 $2n$ 行,每行包含三个实数 $x'_i, y'_i, z'_i$,描述第二组中的点。 所有实数均给出小数点后 12 位的精度。 同时满足:如果点 $r_i = (x_i, y_i, z_i)$ 在某一组中,则点 $-r_i$ 也在该组中。 保证解存在,且即使将精度要求从 $10^{-6}$ 提高到 $10^{-9}$,解依然存在。
输出格式
第一行输出一个实数 $\theta$ ($-\pi \le \theta \le \pi$),描述旋转角度。 第二行输出三个实数 $x, y, z$ ($10^{-3} \le |x| + |y| + |z| \le 10^3$),描述旋转轴上的点 $e$。 第三行输出 $2n$ 个整数 $\pi_1, \dots, \pi_{2n}$。 假设旋转按照右手定则进行(参见说明)。
样例
样例输入 1
2 0.923879533 0.382683432 0 0.923879533 -0.382683432 0 -0.923879533 -0.382683432 0 -0.923879533 0.382683432 0 0.382683432 0.923879533 0 0.382683432 -0.923879533 0 -0.382683432 -0.923879533 0 -0.382683432 0.923879533 0
样例输出 1
-1.570796327 0.000000000 0.000000000 1.000000000 2 3 4 1
说明
为了方便记忆,旋转方式如下:
样例测试用例如下所示:
第一组点为 $\{1, 2, 3, 4\}$,第二组点为 $\{1', 2', 3', 4'\}$。在将第二组直线绕轴 $(0; 0; 1)$ 旋转 $-\frac{\pi}{2}$ 后,我们得到以下匹配:$\{(1', 2), (2', 3), (3', 4), (4', 1)\}$。