#include #include #include using namespace std; const int maxn=50005; struct Data { int L,R,id; }; struct Ti { int lst,id; }; inline bool operator<(const Data &a,const Data &b) { return a.Lb.lst; } int n,res[maxn]; Data cow[maxn]; int main() { #ifdef local freopen("pro.in","r",stdin); #endif scanf("%d",&n); for(int i=0;i Q; Q.push((Ti){cow[0].R,1}); res[cow[0].id]=1; for(int i=1;i=cow[i].L) { int tmp=Q.size(); Q.push((Ti){-1,tmp+1}); } Ti ch=Q.top(); Q.pop(); res[cow[i].id]=ch.id; Q.push((Ti){cow[i].R,ch.id}); } printf("%d\n",Q.size()); for(int i=1;i<=n;i++) printf("%d\n",res[i]); return 0; }