/*
    題意:一些人,相繼插入到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;
}