#include<bits/stdc++.h>
using namespace std;
struct node
{
int x , y, index;
}cu[100005];
bool cmp(node a ,node b)
{
return a.x < b.x;
}
int dp[200005];
int ca[200005];
int ans[200005];
map<int,int>m;
int main(void)
{
int n;
cin>>n;
for(int i = 1 ; i <= n ; i ++)
scanf("%d %d",&cu[i].x,&cu[i].y),cu[i].index = i;
sort(cu+1,cu+1+n,cmp);
int res = 1;
for(int i = 1 ; i <= n ; i ++)
{
int c = cu[i].y;
bool flag = false;
int index = upper_bound(dp + 1, dp + res + 1, c, greater<int>()) - dp;
if(index == res+1)
flag = true;
else
dp[index] = c, ca[i] = index;
if(flag)
dp[++res] = c, ca[i] = res;
}
printf("%d\n",res);
for(int i = 1 ; i <= n ; i ++)
ans[cu[i].index] = ca[i];
for(int i = 1 ; i <= n ; i ++)
printf("%d ", ans[i]);
}