#include <stdio.h> #define N 200010 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 int tree[N<<2]; int pos[N],val[N],ans[N]; int id; void Build(int l,int r,int rt) { tree[rt]=r-l+1; if(l==r) return; int m=(l+r)>>1; Build(lson); Build(rson); } void Update(int p,int l,int r,int rt) { tree[rt]--; if(l==r) { id=r; return; } int m=(l+r)>>1; if(tree[rt<<1]>=p) Update(p,lson); else { p-=tree[rt<<1]; Update(p,rson); } } int main() { int n,i; while(~scanf("%d",&n)) { Build(1,n,1); for(i=1;i<=n;i++) scanf("%d%d",pos+i,val+i); for(i=n;i>=1;i--) { Update(pos[i]+1,1,n,1); ans[id]=val[i]; } for(i=1;i<=n;i++) printf("%d%c",ans[i],n==i? '\n':' '); } return 0; }