坐标控制组织开发了一种自动机器人,用于在二维平面上巡逻 $N$ 个不同的重要地点。第 $i$ 个地点的坐标为 $(x_i, y_i)$,保证任意三个地点不在同一条直线上。
为了引导机器人,你可以在地面上绘制一些线段。每条线段必须直接连接两个重要地点,且除端点外,任意两条线段不得相交。
机器人将从任意一条线段的中点开始巡逻,面向该线段的其中一个端点。它将按照以下步骤无限期地移动:
- 只要机器人处于某条线段的内部,它就会向前移动,朝向该线段的一个端点。
- 当机器人到达一个重要地点时,它最初会面向直接背离刚刚经过的线段的方向。机器人会向右(顺时针)转动,直到其视线与一条从当前地点出发的线段对齐。然后,机器人将开始沿着这条新线段移动。
你的任务是绘制线段,使得无论机器人从哪里开始,都能保证无限次访问每一个重要地点。可以证明这总是可能的。
输入格式
第一行包含一个整数 $N$ ($2 \le N \le 2000$),表示重要地点的数量。
接下来的 $N$ 行,每行包含两个空格分隔的整数 $x_i$ 和 $y_i$ ($-10^9 \le x_i, y_i \le 10^9$),表示第 $i$ 个重要地点的坐标。
保证所有 $N$ 个重要地点各不相同,且任意三个地点不在同一条直线上。
子任务
下表显示了 25 分的分布情况:
| 获得分数 | 附加约束 |
|---|---|
| 2 分 | $2 \le N \le 4$ |
| 4 分 | $2 \le N \le 8$ |
| 3 分 | $3 \le N$ 且这 $N$ 个点按某种顺序构成凸多边形的顶点 |
| 7 分 | 这 $N$ 个点构成一个凸多边形,且多边形内部有一个额外点 |
| 9 分 | 无 |
输出格式
第一行输出一个正整数 $M$,表示你在地面上绘制的线段数量。
接下来的 $M$ 行,每行应包含两个空格分隔的整数 $u_i$ 和 $v_i$ ($1 \le u_i, v_i \le N, u_i \neq v_i$),表示你在第 $u_i$ 个和第 $v_i$ 个重要地点之间绘制了一条线段。
如果有多种可行的答案,输出其中任意一种即可。
样例
输入格式 1
4 0 0 1 1 1 2 2 1
输出格式 1
3 1 2 2 3 2 4
说明
重要地点和绘制的线段如下图所示:
无论机器人从哪里开始,它都会无限次访问每一个重要地点。例如,如果机器人从地点 1 和 2 之间的线段中点开始,面向地点 2,机器人访问地点的顺序为:
$2, 4, 2, 3, 2, 1, 2, 4, \dots$
其中下划线部分会无限重复。
输入格式 2
8 0 0 0 3 1 1 1 2 4 1 4 2 5 0 5 3
输出格式 2
9 1 2 2 4 4 8 8 7 7 5 5 1 3 4 4 5 5 6
说明
重要地点和绘制的线段如下图所示:
无论机器人从哪里开始,它都会无限次访问每一个重要地点。例如,如果机器人从地点 4 和 5 之间的线段中点开始,面向地点 5,机器人访问地点的顺序为:
$5, 7, 5, 6, 5, 1, 2, 4, 3, 4, 8, 7, 5, \dots$
其中下划线部分会无限重复。注意,并不要求每一条线段都被无限次遍历;只要每一个地点都被无限次访问,该方案就是有效的。