#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <stack>#include <map>#include <set>#include <cstdlib>#include <cmath>#define ll long long#define Mod 1000000007#define eps 1e-8using namespace std;const int MAX=1210;typedef struct{ int x,y;}node;node aa[MAX];int color[MAX],n;int ans[MAX];double dis[MAX][MAX];double ddis(node a,node b){ return sqrt((a.x-b.x)*(a.x-b.x)*1.0+(a.y-b.y)*(a.y-b.y)*1.0);}bool judge(double mid){ queue<int> q; for(int i=1;i<=n;i++) color[i]=-1; for(int i=1;i<=n;i++) { if(color[i]!=-1)continue; q.push(i); color[i]=0; while(!q.empty()) { int tmp=q.front(); q.pop(); for(int j=1;j<=n;j++) { if(dis[tmp][j]>mid+eps)continue; if(color[tmp]==color[j]) return 0; if(color[j]==-1) { color[j]=!color[tmp]; q.push(j); } } } } for(int i=1;i<=n;i++) ans[i]=color[i]+1; return 1;}int main(){ while(scanf("%d",&n)!=EOF) { double low=0.0,high=35000.0,INF=40000010.0; for(int i=1;i<=n;i++) scanf("%d%d",&aa[i].x,&aa[i].y); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(i==j) dis[i][j]=INF; else dis[i][j]=dis[j][i]=ddis(aa[i],aa[j]); } double mid; while(low+eps<high) { mid=(high+low)/2; if(judge(mid)) low=mid; else high=mid; } printf("%.9lfn",mid/2); for(int i=1;i<=n;i++) { if(i==n) printf("%dn",ans[i]); else printf("%d ",ans[i]); } } return 0;}


