/*题意:排队买票,依次给出当前人要插队的位置,
如果不能插队就排后面
然后问你最后整个的序列是什么*/
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int l, r, sum;
int mark;
}dp[1000005];
int p[200005];
int v[200005];
int ans[200005];
void Create(int l, int r, int i)
{
dp[i].l = l;
dp[i].r = r;
dp[i].sum = (r - l + 1);
if (l == r)
{
return;
}
int mid = (l + r) >> 1;
Create(l, mid, i * 2);
Create(mid + 1, r, i * 2 + 1);
}
void Change(int a, int b, int i)//a表示空格数量,b为输入的值,i为节点
{
if (dp[i].l == dp[i].r)
{
dp[i].sum = 0;
ans[dp[i].l] = b;
return;
}
int mid = (dp[i].l + dp[i].r) / 2;
//优先放在左边
if (a <= dp[i * 2].sum)//如果左边放的下
{
Change(a, b, i * 2);
}
else//左边放不下
Change(a - dp[i * 2].sum, b, i * 2 + 1);
dp[i].sum = dp[i * 2].sum + dp[i * 2 + 1].sum;
}
int main()
{
int n;
while (cin >> n)
{
Create(1, n, 1);
for (int i = 0; i < n; i++)
{
scanf("%d%d", &p[i], &v[i]);
}
for (int i = n - 1; i >= 0; i--)
{
Change(p[i] + 1, v[i], 1);
}
for (int i = 1; i <= n; i++)
{
if (i != 1)
{
cout << " ";
}
cout << ans[i];
}
cout << endl;
}
return 0;
}