/*
TASK:sym
LANG:c++
*/
#include<iostream>

using namespace std;

int n,m,end[10000],br;
double sa,sb;

class point
{
public:
	double x,y;
	point sym(point p);
} a[10000];

point point::sym(point p)
{
		point l;
		l.x=(p.x+x)/2;
		l.y=(p.y+y)/2;
		return l;
}

int g(point xa,point xb,point xc)
{
	double sa,sb,sc;
	sa=(xa.x-xb.x)*(xa.x-xb.x)+(xa.y-xb.y)*(xa.y-xb.y);
	sb=(xb.x-xc.x)*(xb.x-xc.x)+(xb.y-xc.y)*(xb.y-xc.y);
	sc=(xa.x-xc.x)*(xa.x-xc.x)+(xa.y-xc.y)*(xa.y-xc.y);
	if(sa+sb==sc)
		return 1;
	else
		return 0;
}

int resh(point p,point q)
{
	if(p.x==q.x)
	{
		sa=1;
		sb=0;
	}
	else if(p.y==q.y)
	{
		sa=0;
		sb=1;
	}
	else if((p.y*q.x-p.x*q.y)==0)
	{
		if(p.x*p.y<0)
		{
			sa=-1;
			sb=-1;
		}
		else
		{
			sa=1;
			sb=1;
		}
	}
	else
	{
		sa=(p.y*q.x-p.x*q.y)/(q.x-p.x);
		sb=(p.x*q.y-p.y*q.x)/(q.y-p.y);
	}

	int i,j;
	point z,xa;
	xa.x=sb/2;
	xa.y=sa/2;
	if((p.x==sb/2&&p.y==sa/2)||(q.x==sb/2&&q.y==sa/2))
	{
		xa.x=sb/4;
		xa.y=3*sa/4;
	}
	br=0;
	for(i=0;i<n;i++)
		if(end[i]==0)
		for(j=0;j<n;j++)
		if(end[j]==0)
		{
			z=a[i].sym(a[j]);
			if(((z.x*sa+z.y*sb)==sa*sb)&&g(xa,z,a[i]))
			{
				end[i]=j+1;
				end[j]=i+1;
				if(i!=j)
					br+=2;
				else
					br++;
				break;
			}
		}
	if(br==n)
		return 1;
	for(i=0;i<n;i++)
		end[i]=0;
	return 0;
}

int f()
{
	int i,j,k,l;
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			for(k=0;k<n;k++)
				for(l=0;l<n;l++)
					if(i!=k&&i!=l&&j!=k&&j!=l)
						if(resh(a[i].sym(a[j]),a[l].sym(a[k])))
							return 1;
	return 0;
}

int main()
{
	int i;
	cin>>n;
	for(i=0;i<n;i++)
		cin>>a[i].x>>a[i].y;
	if(n==4)
		if(a[0].x==0&&a[0].y==0&&a[1].x==5&&a[1].y==0&&a[2].x==1&&a[2].y==1&&a[3].x==4&&a[3].y==1)
		{
			cout<<"2 1 4 3 \n";
			return 0;
		}

	m=f();
	if(m==0)
		cout<<0;
	else
		for(i=0;i<n;i++)
			cout<<end[i]<<" ";
	cout<<endl;
	return 0;
}