#include <bits/stdc++.h>
using namespace std;
const long double inf=0x3f3f3f3f;
const int N=2e3+5;
int n,k,maxn=-inf;
long double dp[N][N][2],ans=inf;
stack<int> st;
struct node{
long double x,y;
}a[N];
long double dis(int u,int v){
return sqrt((a[u].x-a[v].x)*(a[u].x-a[v].x) + (a[u].y-a[v].y)*(a[u].y-a[v].y));
}
int check(int id){
if(id <= n) return id;
return id-n;
}
struct jump{
int a,b,x,id;
}pre[N][N][2];
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y;
if(maxn < a[i].y) maxn=a[i].y,k=i;
}
for(int i=n+1;i<=2*n;i++){
a[i].x=a[i-n].x;
a[i].y=a[i-n].y;
}
for(int i=1;i<=2*n;i++){
for(int j=1;j<=2*n;j++){
dp[i][j][0]=dp[i][j][1]=inf;
}
}
dp[k][k][0]=dp[k][k][1]=0;
dp[k+n][k+n][0]=dp[k+n][k+n][1]=0;
for(int len=2;len<=n;len++){
for(int l=1;l+len-1<=2*n;l++){
int r=l+len-1;
if(dp[l+1][r][0]+dis(l,l+1) < dp[l+1][r][1]+dis(l,r)){
dp[l][r][0] = dp[l+1][r][0]+dis(l,l+1);
pre[l][r][0].a = l+1, pre[l][r][0].b = r;
pre[l][r][0].x = 0, pre[l][r][0].id = check(l);
}
if(dp[l+1][r][0]+dis(l,l+1) >= dp[l+1][r][1]+dis(l,r)){
dp[l][r][0] = dp[l+1][r][1]+dis(l,r);
pre[l][r][0].a = l+1, pre[l][r][0].b = r;
pre[l][r][0].x = 1, pre[l][r][0].id = check(l);
}
if(dp[l][r-1][0]+dis(r,l) < dp[l][r-1][1]+dis(r,r-1)){
dp[l][r][1] = dp[l][r-1][0]+dis(r,l);
pre[l][r][1].a = l, pre[l][r][1].b=r-1;
pre[l][r][1].x = 0, pre[l][r][1].id= check(r);
}
if(dp[l][r-1][0]+dis(r,l) >= dp[l][r-1][1]+dis(r,r-1)){
dp[l][r][1] = dp[l][r-1][1]+dis(r,r-1);
pre[l][r][1].a = l, pre[l][r][1].b = r-1;
pre[l][r][1].x = 1, pre[l][r][1].id = check(r);
}
}
}
jump pos;
for(int i=1;i<=n+1;i++){
if(dp[i][i+n-1][0] < ans){
ans=dp[i][i+n-1][0];
pos=pre[i][i+n-1][0];
}
if(dp[i][i+n-1][1] < ans){
ans=dp[i][i+n-1][1];
pos=pre[i][i+n-1][1];
}
}
while(pos.id!=0){
st.push(pos.id);
pos=pre[pos.a][pos.b][pos.x];
}
st.push(k);
while(!st.empty()){
cout<<st.top()<<" ";
st.pop();
}
return 0;
}