/*
TASK:sym
LANG:C++
*/
#include <iostream.h>
#include <complex.h>
#include <stdlib.h>
using namespace std;
typedef struct {
                  double x,y;
                  long pos;
               } pt;
pt a[1000];

long p[1000];
long n;
int cmpd(double a,double b)
{
  if (a>b) return 1;
  if (a<b) return -1;
  return 0;
}
double dist (pt a,pt b)
{
  return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
void inp(void)
{
  long i;
  cin>>n;
  for (i=0;i<n;i++) {
                        cin>>a[i].x;
                        cin>>a[i].y;
                        a[i].pos=i+1;
                    }
}
int chck (pt tp)
{
  long k,v;
  double d1,d2;
  for (k=0;k<n-1;k++) {
      if (p[k]!=-1) continue;
      for (v=k+1;v<n;v++) {
                           if (p[v]!=-1) continue;
                           p[v]=k;
                           p[k]=v;
                           d1=dist(a[k],tp);
                           d2=dist(a[v],tp);
                           if (cmpd(d1,d2)!=0) return 0;
                         }
                      }
return 1;
}
void outp(void)
{
  long i;
  for (i=0;i<n;i++) cout<<a[p[i]].pos<<" ";
  cout<<endl;
}
double min (double a,double b)
{
  if (a>b) return b;
  if (b>a) return a;
  return a;
}
double max (double a,double b)
{
  if (a>b) return a;
  if (b>a) return b;
  return a;
}
double modul(double a)
{
 if (a<0) return -a;
 return a;
}
void work(void)
{
  long i,j,k,v,l;
  double r;
  pt tp;
  for (i=0;i<n-1;i++)
        for (j=i+1;j<n;j++) {
                              memset(&p,-1,sizeof(p));
                              r=((a[j].x-a[i].x)/2);
                              tp.x=min(a[i].x,a[j].x)+modul(r);
                              r=(((a[j].y-a[i].y)/2));
                              tp.y=min(a[i].y,a[j].y)+modul(r);
                              p[i]=j;
                              p[j]=i;
                              if (chck(tp)==1) {
                                                 outp();
                                                 return;
                                               }
/*                              r=i+j;
                              p[r]=i;
                              tp.x=a[i].x+(a[r].x/2);
                              tp.y=a[i].y+(a[r].y/2);
                              if (chck(tp)==1) outp();*/
                            }
}
int cmp(const void *a,const void *b)
{
  pt *p,*q;
  p=(pt *) a;
  q=(pt *) b;
  if (p->x<q->x) return -1;
  if (p->x>q->x) return 1;
  return 0;
}
int main(void)
{
  inp();
//  qsort(a,n,sizeof(a[0]),cmp);
  work();
  return 0;
}
