午餐时间到了!这就是为什么 $n$ 名员工来到食堂吃午餐。已知第 $i$ 名员工属于团队 $c_i$,且具有傲慢值 $a_i$。
假设队列中当前有 $l$ 个人。队列中的位置从队列开头起编号为 $1$ 到 $l$。当一个人来到食堂时,他会尝试通过站在他的一名队友旁边,尽可能靠近队列的开头。形式化地说,如果一名新来者进入队列的位置为 $k$ ($1 \le k \le l + 1$),他会将第 $k$ 个人及之后的所有人向后移动一个位置,并占据位置 $k$。特别地,$k = 1$ 对应队列的开头,$k = l + 1$ 对应队列的末尾。
员工 $i$ 仅在满足以下两个条件时才能停留在位置 $k$:
- 到达位置 $k$ 后,新来者的邻居中至少有一人来自同一个团队 $c_i$;
- 新来者因其傲慢程度而移动的人数不能过多,即:$k \ge l + 1 - a_i$。
在所有满足上述条件的 $k$ 中,选择最小的一个。如果没有合适的 $k$ 值,新来者将直接排在队列中最后一个人的后面。
例如,如果队列中有五个人,分别属于团队 1、3、4、1、3(从队列开头算起),而新来者属于团队 1,傲慢值为 3,他会停留在队列的第 4 个位置。此后,员工团队序列变为 1, 3, 4, 1, 1, 3。注意,傲慢值 3 本来也允许他到达第 3 个位置,但在那种情况下,他旁边没有队友,因此第一个条件被违反了。
已知员工到达的顺序以及他们的 $c_i$ 和 $a_i$ 值,请找出最后队列的样子。
输入格式
第一行包含一个整数 $n$ ($1 \le n \le 400\,000$),表示员工人数。 接下来的 $n$ 行,每行包含两个整数 $c_i, a_i$ ($1 \le c_i \le n, 0 \le a_i \le 400\,000$),分别表示第 $i$ 名员工的团队和傲慢值。
输出格式
输出 $n$ 个从 $1$ 到 $n$ 的不同整数,表示所有员工到达食堂后,从队列开头到末尾的员工编号。员工按其在输入数据中出现的顺序从 $1$ 到 $n$ 进行编号。
样例
输入 1
8 1 0 2 1 2 2 1 1 3 2 1 3 2 3 2 5
输出 1
1 3 8 2 7 6 4 5