你可能玩过俄罗斯方块。在这个游戏中,二维方块会垂直落到平台上。方块会一直下落,直到碰到障碍物——即另一个方块或平台。一旦停止,方块就不会再移动。
在原始的俄罗斯方块游戏中,填满的行会消失,但为了简化起见,本题不考虑消除行的情况。此外,假设所有方块都是高度为 1 的水平长条。同时,不允许旋转或移动方块。唯一可以改变的是方块下落的顺序。给定所有方块的长度和水平偏移量,请找到一种方块下落顺序,使得最终形成的图形高度尽可能小。
任务
编写一个程序,完成以下操作:
- 读取方块的描述;
- 找到一种方块顺序,使得由这些方块构成的图形高度最小;
- 将答案输出到标准输出。
输入格式
标准输入的第一行包含一个整数 $n$ ($1 \le n \le 100\,000$),表示即将落到平台上的方块数量。接下来的 $n$ 行,每行包含两个整数 $l_i$ 和 $p_i$ ($1 \le l_i, p_i \le 1\,000\,000\,000$),中间用空格分隔,分别表示第 $i$ 个方块的长度和该方块左侧的水平偏移量。
输出格式
输出的第一行应包含一个整数,表示由给定方块构成的图形的最小可能高度。接下来的 $n$ 行应包含使图形高度最小的方块顺序描述。输出的第 $(i + 1)$ 行应包含一个整数,表示第 $i$ 个下落的方块的编号。方块按输入中出现的顺序从 1 到 $n$ 进行编号。
如果存在多个正确的解决方案,输出其中任意一个即可。
样例
输入
5 4 2 3 1 3 3 4 6 4 5
输出
3 1 4 5 2 3