//============================================================================
// Name : POJ_2481.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : 树状数组都快忘光了 1924K 1157MS C++; 2640K 2391MS G++
//============================================================================
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>
using namespace std;
struct interval
{
int x,y;
int id;
}s[100005];
int c[100005];
int ans[100005];
int maxx;
bool cmp(interval a,interval b)
{
if(a.y == b.y)
return a.x < b.x;
return a.y> b.y;
}
int lowbits(int x)
{
return x&(-x);
}
void add(int n )
{
while(n < maxx)
{
c[n]++;
n = n+lowbits(n);
}
}
int sums(int n)
{
int sum = 0;
while(n > 0)
{
sum += c[n];
n = n-lowbits(n);
}
return sum;
}
int main() {
freopen("in","r",stdin);
int n;
int i;
while(scanf("%d",&n) && n)
{
maxx = -1;
for(i = 0; i < n; i++)
{
scanf("%d %d",&(s[i].x),&(s[i].y));
s[i].id = i;
if(s[i].x > maxx)
maxx = s[i].x;
}
maxx +=2;
for(i = 0 ; i <= maxx; i++)
c[i] = 0;
sort(s,s+n,cmp);
add(s[0].x + 1);
ans[s[0].id] = 0;
for(i = 1; i < n; i++)
{
if(s[i].x == s[i-1].x && s[i].y == s[i-1].y)
{
ans[s[i].id] = ans[s[i-1].id];
}else
{
ans[s[i].id] = sums(s[i].x + 1);
}
add(s[i].x + 1);
}
for(i = 0; i < n-1;i++)
{
printf("%d ",ans[i]);
}
printf("%d/n",ans[i]);
}
return 0;
}