if(n<=18)
{
for(int i=0;i<n;i++)
{
cin>>x[i]>>y[i];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
w[i][j]=distan(x[i],y[i],x[j],y[j]);
}
}
int k=n;
for(int i=0;i<n;i++)
{
if(y[i]>y[k])
{
k=i;
}
}
for(int i=0;i<=(1<<n);i++)
for(int j=0;j<=18;j++)
dp[i][j]=1e17,last[i][j]=-1;
dp[1<<k][k]=0;
for(int S=0;S<(1<<n);S++){
for(int i=0;i<n;i++){
if(!(S&(1<<i)))continue;
for(int j=0;j<n;j++)
{
if(!(S&(1<<j))||i==j)continue;
if(dp[S][i]>dp[S^(1<<i)][j]+w[j][i])
{
dp[S][i]=dp[S^(1<<i)][j]+w[j][i];
last[S][i]=j;
}
}
}
}
int u=0;
for(int i=0;i<n;i++)
{
if(dp[(1<<n)-1][i]<dp[(1<<n)-1][u])u=i;
}
ans[++m]=u;
int S=(1<<n)-1;
while(~last[S][u])
{
ans[++m]=last[S][u];
int tmp=u;
u=last[S][u];
S=(S^(1<<tmp));
}
for(int i=m;i>=1;i--)
{
cout<<ans[i]+1<<' ';
}
return 0;
}