#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct node
{
int l, r;
int id;
friend bool operator < (node x, node y)
{
if (x.r == y.r)
{
return x.l < y.l;
}
return x.r > y.r;
}
};
#define N 100010
int t[N];
node a[N];
int ans[N];
int lowbit(int x)
{
return x & (-x);
}
int getsum(int k)
{
int sum = 0;
while (k)
{
sum += t[k];
k -= lowbit(k);
}
return sum;
}
void update(int k, int delta)
{
while (k < N)
{
t[k] += delta;
k += lowbit(k);
}
}
int main()
{
int n;
while (scanf("%d", &n) && n != 0)
{
memset(t, 0, sizeof(t));
memset(a, 0, sizeof(a));
memset(ans, 0, sizeof(ans));
for (int i = 1; i <= n; i++)
{
scanf("%d%d", &a[i].l, &a[i].r);
a[i].l++;
a[i].r++;
a[i].id = i;
}
sort(a + 1, a + 1 + n);
node pre;
pre.l = pre.r = pre.id;
for (int i = 1; i <= n; i++)
{
if (pre.l == a[i].l && pre.r == a[i].r)
{
ans[a[i].id] = ans[pre.id];
update(a[i].l, 1);
}
else
{
ans[a[i].id] = getsum(a[i].l);
update(a[i].l, 1);
}
pre = a[i];
}
for (int i = 1; i <= n; i++)
{
printf("%d ", ans[i]);
}
putchar(10);
}
return 0;
}