/*
    题意:一些人,相继插入到pos[i]之后  问最后的情形
    解题报告:
    本题的算法是利用线段树进行倒推。基本思想是拿一个N个1的序列,从最后一次插入开始倒推。
    设当前插入的是Pos Val,那么找到从左边数第Pos + 1个1的位置就是最终需要插入Val的位置,
    然后把那个1改成0。

    我用树状数组写
*/

#include
<cstdio>
#include
<cstring>

const int MAXN = 200010;

int c[MAXN];
int pos[MAXN],val[MAXN],ans[MAXN];
int N;

inline 
int lowbit(int x){return x&(-x);}

void dec(int p)
{
    
while(p<=N)
    
{
        c[p]
--;
        p
+=lowbit(p);
    }

}

int getK(int K)
{
    
int ans = 0,cnt=0;
    
for(int i=18;i>=0;i--)//i>=0
    {
        ans
+=(1<<i);
        
if(ans>=N||cnt+c[ans]>=K)ans-=(1<<i);
        
else cnt+=c[ans];
    }

    
return ans+1;
}


int main()
{
    
for(;~scanf("%d",&N);)
    
{
        
for(int i=1;i<=N;i++)
        
{
            scanf(
"%d%d",&pos[i],&val[i]);
            c[i]
=lowbit(i);
        }

        
for(int i=N;i;i--)
        
{
            
int pp=getK(pos[i]+1);
            ans[pp]
=val[i];
            dec(pp);
        }

        
for(int i=1;i<=N;i++)
            printf(
"%d ",ans[i]);
        puts(
"");
    }

    
return 0;
}