#include<bits/stdc++.h>
#define ONLINE_JUDGE
using namespace std;
#ifdef ONLINE_JUDGE
#include "sphinx.h"
#endif
#ifndef ONLINE_JUDGE
int a[1005],b[1005],cnt=0;
int perform_experiment(vector<int>E){
printf("%d\n",++cnt);
int sz=E.size();
for(int i=0;i<sz;++i){
b[i]=(E[i]==-1?a[i]:E[i]);
}
int ans=1;
for(int i=0;i<sz-1;++i)ans+=(b[i]!=b[i+1]);
return ans;
}
#endif
int n,m;
vector<int>C,G;
int fa[255],u[100005],v[100005];
int findfather(int x){
return x==fa[x]?x:fa[x]=findfather(fa[x]);
}
int aa[255];
int findaa(int x){
return x==aa[x]?x:aa[x]=findaa(aa[x]);
}
vector<int>gg[255];
int ss[255],vist[255],tt,I;
int query(int l,int r){
for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=n;
for(int i=l;i<=r;++i)for(auto cu:gg[ss[i]])vist[cu]=1,C[cu]=-1;
vist[I]=1,C[I]=-1;
for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
int fu=findaa(u[i]),fv=findaa(v[i]);
if(fu!=fv)aa[fu]=fv;
}
int cnt=0;
for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
return r-l+1+1+cnt-perform_experiment(C);
}
void solve(int l,int r,int k){
if(!k)return;
if(l==r){
fa[ss[l]]=I;
return;
}
int mid=(l+r)>>1;
int k1=query(l,mid);
solve(l,mid,k1);
solve(mid+1,r,k-k1);
}
int s1[255],s2[255];
vector<int>g[255];
int dep[255];
void dfs(int x){
vist[x]=1;
for(auto cu:g[x])if(!vist[cu]){
dep[cu]=dep[x]+1;
dfs(cu);
}
}
int query1(int l,int r,int d){
for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=d;
for(int i=l;i<=r;++i)for(auto cu:gg[s1[i]])vist[cu]=1,C[cu]=-1;
for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
int fu=findaa(u[i]),fv=findaa(v[i]);
if(fu!=fv)aa[fu]=fv;
}
int cnt=0;
for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
return r-l+1+cnt-perform_experiment(C);
}
int query2(int l,int r,int d){
for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=d;
for(int i=l;i<=r;++i)for(auto cu:gg[s2[i]])vist[cu]=1,C[cu]=-1;
for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
int fu=findaa(u[i]),fv=findaa(v[i]);
if(fu!=fv)aa[fu]=fv;
}
int cnt=0;
for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
return r-l+1+cnt-perform_experiment(C);
}
int p[255],v1[255],v2[255],sy1,sy2;
void solve1(int l,int r,int k,int d){
if(!k)return;
if(l==r){
G[s1[l]]=d;v1[l]=1;--sy1;
return;
}
int mid=(l+r)>>1;
int al=0,ar=0;
for(int i=l;i<=mid;++i)al+=v1[i];
for(int i=mid+1;i<=r;++i)ar+=v1[i];
if(al<mid-l+1)solve1(l,mid,(mid-l+1-al==sy1?1:query1(l,mid,d)),d);
if(ar<r-mid)solve1(mid+1,r,(r-mid+1-ar==sy1?1:query1(mid+1,r,d)),d);
}
void solve2(int l,int r,int k,int d){
if(!k)return;
if(l==r){
G[s2[l]]=d;v2[l]=1;--sy2;
return;
}
int mid=(l+r)>>1;
solve2(l,mid,(mid-l+1-al==sy2?1:query2(l,mid,d)),d);
solve2(mid+1,r,(r-mid+1-ar==sy2?1:query2(mid+1,r,d)),d);
}
vector<int>find_colours(int N,vector<int>X,vector<int>Y){
n=N;m=X.size();
C.resize(n);G.resize(n);
for(int i=0;i<m;++i)u[i]=X[i],v[i]=Y[i];
for(int i=0;i<n;++i)fa[i]=i;
for(int i=1;i<n;++i){
I=i;
for(int j=0;j<i;++j)gg[j].clear();
for(int j=0;j<i;++j){
gg[findfather(j)].emplace_back(j);
}
tt=0;
for(int j=0;j<i;++j)if(gg[j].size())ss[++tt]=j;
solve(1,tt,query(1,tt));
}
for(int j=0;j<n;++j)gg[j].clear();
for(int j=0;j<n;++j){
gg[findfather(j)].emplace_back(j);
}
for(int i=0;i<n;++i)g[i].clear();
for(int i=0;i<m;++i)if(findfather(u[i])!=findfather(v[i])){
int fu=fa[u[i]],fv=fa[v[i]];
g[fu].emplace_back(fv);
g[fv].emplace_back(fu);
}
int r=findfather(0);
for(int i=0;i<n;++i)vist[i]=0;
dep[r]=0;dfs(r);
int t1=0,t2=0;
for(int i=0;i<n;++i)if(fa[i]==i){
if(dep[i]%2)s1[++t1]=i;
else s2[++t2]=i;
}
if(t1+t2==1){
for(int i=0;i<n;++i){
for(int j=0;j<n;++j)G[j]=(j==0?-1:i);
if(perform_experiment(G)==1){
for(int j=0;j<n;++j)G[j]=i;
break;
}
}
return G;
}
for(int i=1;i<=t1;++i)v1[i]=0;
for(int i=1;i<=t2;++i)v2[i]=0;
for(int i=0;i<n;++i)p[i]=i;
mt19937 mt(1377);
shuffle(p,p+n,mt);
sy1=t1;sy2=t2;
for(int dd=0;dd<n;++dd){
int d=p[dd];
if(t1)solve1(1,t1,query1(1,t1,d),d);
if(t2)solve2(1,t2,query2(1,t2,d),d);
}
for(int i=0;i<n;++i)G[i]=G[fa[i]];
return G;
}
#ifndef ONLINE_JUDGE
int main(){
int n=10;
mt19937 mt(time(0));
for(int i=0;i<n;++i)a[i]=mt()%n;
vector<int>X(n-1),Y(n-1);
for(int i=0;i<n-1;++i){
X[i]=i,Y[i]=i+1;
}
auto ans=find_colours(n,X,Y);
for(int i=0;i<n;++i)assert(a[i]==ans[i]);
system("sphinx");
return 0;
}
#endif