#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct punct{int x; int y;};
struct marmota{int x; int y; int poz;};
punct vt[810],nou,nn,aux;
marmota v[810];
int n,i,j,k,shx,shy,kk,viz[810],rez[810],ok,sol[810],unu,doi,poz,as,lung,p;
bool mai_mic(marmota a, marmota b)
{
if ((a.x<b.x)||((a.x==b.x)&&(a.y<b.y)))
return true;
return false;
}
bool cmp(marmota a, marmota b)
{
if (mai_mic(a,b))
return true;
return false;
}
int caut_bin(punct x, long l, long r)
{
long m=(l+r)/2;
if ((x.x==v[m].x)&&(x.y==v[m].y))
return m;
if (l>=r)
return 0;
if ((x.x<v[m].x)||((x.x==v[m].x)&&(x.y<v[m].y)))
return caut_bin(x,l,m-1);
else
return caut_bin(x,m+1,r);
}
int main(){
freopen("overlap.in","r",stdin);
freopen("overlap.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d%d",&v[i].x,&v[i].y);
v[i].poz=i;
}
sort(v+1,v+n+1,cmp);
for (i=1;i<=n;i++)
{
// printf("\n\n%d\n\n",i);
nou.x=v[1].x;
nou.y=v[1].y;
for (k=0;k<=3;k++)
{
shx=v[i].x-nou.x;
shy=v[i].y-nou.y;
memset(vt,0,sizeof(vt));
for (j=1;j<=n;j++)
{
nn.x=v[j].x;
nn.y=v[j].y;
aux=nn;
for (kk=1;kk<=k;kk++)
{
nn.x=aux.y;
nn.y=-aux.x;
aux=nn;
}
vt[j].x=nn.x+shx;
vt[j].y=nn.y+shy;
}
memset(viz,0,sizeof(viz));
memset(rez,0,sizeof(rez));
// for (j=1;j<=n;j++)
// printf("%d %d\n",vt[j].x,vt[j].y);
// printf("\n");
ok=1;
for (j=1;j<=n;j++)
// if (viz[j]==0)
{
poz=caut_bin(vt[j],1,n);
// viz[j]=1;
// if (viz[poz]==1)
// {
// k=poz;
// while (v[k].x==v[poz].x&&v[k].y==v[poz].y&&k>=1)
// {
// if (viz[k]==0)
// {
// poz=k;
// break;
// }
// k--;
// }
// k=poz;
// if (viz[poz]==1)
// while (v[k].x==v[poz].x&&v[k].y==v[poz].y&&k<=n)
// {
// if (viz[k]==0)
// {
// poz=k;
// break;
// }
// k++;
}
}
// printf("%d\n",poz);
if (poz!=0&&viz[poz]==0)
{
rez[v[j].poz]=v[poz].poz;
viz[poz]=1;
}
}
// for (j=1;j<=n;j++)
// printf("%d ",rez[j]);
// printf("\n\n");
as=1;
memset(viz,0,sizeof(viz));
for (j=1;j<=n;j++)
if (rez[j]&&viz[j]==0)
{
// viz[j]=1;
p=j;
lung=0;
while (p&&viz[p]==0)
{
lung++;
viz[p]=1;
p=rez[p];
}
// printf("%d\n",lung);
if (lung%2)
{
// as=0;
// break;
}
}
memset(sol,0,sizeof(sol));
// return 0;
if (as)
{
memset(viz,0,sizeof(viz));
for (j=1;j<=n;j++)
{
if (rez[j]&&viz[j]==0)
{
// viz[j]=1;
p=j;
lung=0;
while (p&&viz[p]==0)
{
lung++;
viz[p]=1;
if (lung%2==1)
sol[p]=1;
else
sol[p]=2;
p=rez[p];
}
}
}
}
unu=doi=0;
for (j=1;j<=n;j++)
{
if (sol[j]==1)
unu++;
if (sol[j]==2)
doi++;
}
if ((unu==doi)&&(unu==(n/2)))
//am solutie
{
for (i=1;i<=n;i++)
printf("%d\n",sol[i]);
return 0;
}
aux=nou;
nou.x=aux.y;
nou.y=-aux.x;
}
}
return 0;
}