https://vjudge.net/contest/279730#problem/B
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct str
{
int l,r,i;
str(int x=0,int y=0,int z=0)
{
l=x;
r=y;
i=z;
}
bool operator<(const str &str1)const
{
if (r==str1.r) return l<str1.l;
else return r>str1.r;
}
} p;
p a[100000];
int i,n,m,x,y,j,ans,f,b[100000],c[100000];
priority_queue<p> q;
bool cmp(str a,str b)
{
if(a.l==b.l)
return a.r<b.r;
else
return a.l<b.l;
}
int main()
{
while (~scanf("%d",&n))
{
for (i=1; i<=n; i++)
{
scanf("%d%d",&x,&y);
a[i]= {x,y,i};
}
ans=1;
sort(a+1,a+n+1,cmp);
q.push(a[1]);
b[a[1].i]=1;
for (i=2; i<=n; i++)
{
if (q.size()&&q.top().r<a[i].l)
{
b[a[i].i]=b[q.top().i];
q.pop();
}
else
{
ans++;
b[a[i].i]=ans;
}
q.push(a[i]);
}
printf("%d\n",ans);
for (j=1; j<=n; j++)
printf("%d\n",b[j]);
while(q.size()) q.pop();
}
}