/*
TASK:sym
LANG:C++
*/

#include <stdio.h>
#include <math.h>
int N;
double a[4005][4005];
int ans[4005];

struct coord
{ int x,y; } points[5005];

void input ()
{ int i,j;
  scanf("%d",&N);
  for (i=1;i<=N;i++)
   { scanf("%d%d",&points[i].x,&points[i].y);
     for (j=1;j<i;j++)
       { a[i][j]=sqrt((points[i].x-points[j].x)*(points[i].x-points[j].x)+(points[i].y-points[j].y)*(points[i].y-points[j].y));
         a[j][i]=a[i][j];
       }
   }
}

double abs (double n)
{ if (n<0) return -n;
  return n;
}

int cmp (double n1,double n2)
{ double n=n1-n2;
  if (abs(n)<0.00000000001) return 0;
  if (n>0) return 1;
  return -1;
}

void sort (int k,int l,int r)
{ int i=l,j=r;
  double m=a[k][(i+j)/2];

  do {

  while (cmp(a[k][i],m)==-1) i++; // a[k][i]<m
  while (cmp(a[k][j],m)==1) j--;  // a[k][j]>m

  if (i<=j)
     { double p=a[k][i]; a[k][i]=a[k][j]; a[k][j]=p;
       i++; j--; }
  }
  while (i<=j);

  if (j>l) sort (k,l,j);
  if (i<r) sort (k,i,r);
}

int rcmp (int i,int j)
{ int k;
  for (k=1;k<=N;k++)
     if (cmp(a[i][k],a[j][k])!=0) return 0;
  return 1;
}

int main ()
{ int i,j;

  input();
  
  for (i=1;i<=N;i++)
    sort(i,1,N); // ???

  for (i=1;i<=N;i++)
   if (!ans[i])
    { for (j=i+1;j<=N;j++)
         if ((!ans[j])&&(rcmp(i,j))) { ans[i]=j; ans[j]=i; break; }
      if (j==N+1) ans[i]=i;
    }

  for (i=1;i<N;i++)
    printf("%d ",ans[i]);
  printf ("%d\n",ans[N]);
  return 0;
}

