Byteasar 国王的宫殿里闹鬼了。心怀恶意的人声称那是已故 Byteasar 王后的鬼魂(她最近在可疑的情况下去世了),因为它像她生前一样,非常喜欢对着镜子端详自己。难怪 Byteasar 很乐意摆脱这个鬼魂!
Byteasar 决定在宫殿的一个房间里设置一个特殊的镜子陷阱。这是一个封闭、光线充足的房间,其每一面内墙都覆盖着镜子。此外,在它的每一个角落都可以安装激光枪或激光探测器。一旦鬼魂穿过其中一条激光束,警报就会响起,召唤 Byteasar 的捉鬼小队(作为皇家团队,他们更喜欢不被俗称为“捉鬼敢死队”),他们肯定会很快处理掉鬼魂。
安装镜子陷阱的房间形状是一个多边形,其相邻的边互相垂直。此外,每一条边的长度(以米为单位)都是整数。如果在一个角落安装了激光枪,其光束必须沿着该角落两面墙形成的角平分线射出(在平行于地面的平面内)。显然,如果激光束遇到镜子,它会发生反射,遵循常规的反射定律:入射光线与法线的夹角等于反射光线与同一法线的夹角。由于房间的结构,这个角度始终是 45 度。沿着角平分线射入放置有探测器的角落的光束会被其完全吸收。另一方面,沿着角平分线射入没有探测器的角落(尽管可能装有激光枪)的光束会被反射回来(旋转 180 度)。在所有其他情况下,光束的方向根本不会改变。
应该在房间里放置尽可能多的激光枪和激光探测器,使得每条激光束最终都被某个探测器吸收,没有两条激光束被同一个探测器吸收,且每个探测器都吸收了某条激光束。此外,激光枪和探测器不能放置在同一个角落。
一个镜子陷阱的例子,激光束从角落 1 射向角落 7。
编写一个程序:
- 从标准输入读取镜子陷阱的形状描述,
- 确定满足上述条件并能放置最大数量激光枪和探测器的方法,
- 将结果写入标准输出。
输入格式
标准输入的第一行包含一个整数 $n$ ($4 ≤ n ≤ 100\,000$),表示镜子陷阱的墙壁数量。接下来的 $n$ 行,每行包含两个整数 $x_i$ 和 $y_i$,表示第 $i$ 个角落的坐标($1 ≤ i ≤ n$, $-1\,000\,000 ≤ x_i,y_i ≤ 1\,000\,000$),中间用空格分隔。每两个相邻的角落由一条平行于坐标轴的墙壁连接。除了相邻墙壁共用一个端点(即角落)外,没有两条墙壁共用点。房间的角落按顺时针顺序给出(即,如果沿着墙壁走,房间内部在右手边)。所有墙壁的总长度不超过 $300\,000$。
输出格式
程序应在标准输出的第一行输出一个整数 $m$,表示可以在镜子陷阱中设置的最大激光枪-探测器对数。在接下来的 $m$ 行中,每行应包含一对整数 $a_i$ 和 $b_i$,中间用空格分隔,其中 $a_i$ 表示放置激光枪的角落编号,$b_i$ 表示放置对应激光探测器的角落编号,满足 $1 ≤ a_i,b_i ≤ n$。如果存在多种最优方案,任选其一即可。
样例
输入 1
10 1 1 3 1 3 -2 -3 -2 -3 0 -1 0 -1 -1 2 -1 2 0 1 0
输出 1
5 10 5 1 7 2 9 3 8 4 6
图中描绘了镜子陷阱中激光枪和探测器的一种示例部署。