#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
struct node
{
int id,x,y;
}st[maxn];
int num[maxn];
int n;
int c[maxn];
bool cmp(node a,node b)
{
if(a.y!=b.y)
return a.y>b.y;
else
return a.x<b.x;
}
int lowbit(int x)
{
return x&(-x);
}
void update(int id)
{
for(int i=id;i<maxn;i+=lowbit(i))
c[i]++;
}
int getsum(int id)
{
int ans=0;
for(int i=id;i>=1;i-=lowbit(i))
ans+=c[i];
return ans;
}
int main()
{
while(scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
{
scanf("%d%d",&st[i].x,&st[i].y),st[i].id=i;
st[i].x++; //树状数组,不要有0
st[i].y++;
}
memset(num,0,sizeof(num));
memset(c,0,sizeof(c));
sort(st+1,st+1+n,cmp);
for(int i=1;i<=n;i++)
{
if(i!=1&&st[i].x==st[i-1].x&&st[i].y==st[i-1].y)
{
num[st[i].id]=num[st[i-1].id]; //相同的点,就继承它的数目就可以了。
}
else
{
num[st[i].id]=getsum(st[i].x);
}
update(st[i].x);
}
for(int i=1;i<n;i++)
cout<<num[i]<<" ";
cout<<num[n]<<endl;
}
}