#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
int n,k,pre[20][1<<20];
double dp[20][1<<20];
struct point{
double x,y;
int id;
inline bool operator <(const point &o) const{
return x<o.x||(x==o.x&&y<o.y);
}
}p[maxn];
inline double f(double t){
return t*t;
}
inline double d(int a,int b){
return f(p[a].x-p[b].x)+f(p[a].y-p[b].y);
}
double dfs(int now,int s){
if(s==(1<<n)-1)
return 0;
if(dp[now][s]>=0)
return dp[now][s];
double res=1e20;
int ans=0;
for(int i=1;i<=n;++i)
if(!(s&(1<<i-1))){
double p=dfs(i,s|(1<<i-1))+d(i,now);
if(p<res)
res=p,ans=i;
}
pre[now][s]=ans;
return dp[now][s]=res;
}
void ask(int now,int s){
printf("%d ",p[now].id);
if(s==(1<<n)-1)
return;
ask(pre[now][s],s|(1<<pre[now][s]-1));
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%lf%lf",&p[i].x,&p[i].y);
p[i].id=i;
}
k=1;
for(int i=2;i<=n;++i)
if(p[i].y>p[k].y)
k=i;
for(int i=1;i<=n;++i)
for(int j=0;j<(1<<n);++j)
dp[i][j]=-1;
dfs(k,1<<k-1);
ask(k,1<<k-1);
return 0;
}