#include <bits/stdc++.h>
using namespace std;
const double inf = 1000000000;
int n, maxy = -inf, k;
stack<int> anss;
double x[2005], y[2005], dp[2005][2005][2], from[2005][2005][2];
double dis(int a, int b){
return sqrt((x[a] - x[b]) * (x[a] - x[b]) + (y[a] - y[b]) * (y[a] - y[b]));
}
int main(){
cin >> n;
for (int i = 1; i <= n; ++i){
cin >> x[i] >> y[i];
x[n + i] = x[i];
y[n + i] = y[i];
if (y[i] > maxy){
maxy = y[i];
k = i;
}
}
for (int len = 1; len <= n; ++len){
for(int i = 1; i + len - 1 <= n * 2; ++i){
int j = i + len - 1;
dp[i][j][0] = inf;
dp[i][j][1] = inf;
}
}
dp[k][k][0] = dp[k][k][1] = dp[k + n][k + n][0] = dp[k + n][k + n][1] = 0;
from[k][k][0] = from[k][k][1] = from[k + n][k + n][0] = from[k + n][k + n][1] = k;
for (int len = 2; len <= n; ++len){
for(int i = 1; i + len - 1 <= n * 2; ++i){
int j = i + len - 1;
double a = dp[i + 1][j][0] + dis(i,i + 1);
double b = dp[i + 1][j][1] + dis(i,j);
if(a > b){
dp[i][j][0] = b;
from[i][j][0] = 1;
}
else{
dp[i][j][0] = a;
from[i][j][0] = 0;
}
a = dp[i][j - 1][1] + dis(j - 1,j);
b = dp[i][j - 1][0] + dis(i,j);
if(a > b){
dp[i][j][1] = b;
from[i][j][1] = 0;
}
else{
dp[i][j][1] = a;
from[i][j][1] = 1;
}
}
}
double ans = inf;
int l = 0, r = 0, lr = 0, last = 0;
for (int i = 1; i <= n; ++i){
if (dp[i][i + n - 1][0] < ans){
l = i;
r = i + n - 1;
lr = 0;
last = i;
ans = dp[i][i + n - 1][0];
}
if (dp[i][i + n - 1][1] < ans){
l = i;
r = i + n - 1;
lr = 1;
last = i + n - 1;
ans = dp[i][i + n - 1][1];
}
}
for (int i = 1; i <= n; ++i){
anss.push(last);
if (lr == 0){
double a = dp[l + 1][r][0] + dis(l,l + 1);
double b = dp[l + 1][r][1] + dis(l,r);
if (abs(a - dp[l][r][lr]) < abs(b - dp[l][r][lr])){
lr = 0;
l += 1;
last = l;
}
else{
lr = 1;
l += 1;
last = r;
}
}
else if (lr == 1){
double a = dp[l][r - 1][1] + dis(r - 1,r);
double b = dp[l][r - 1][0] + dis(l,r);
if (abs(a - dp[l][r][lr]) < abs(b - dp[l][r][lr])){
lr = 1;
r -= 1;
last = r;
}
else{
lr = 0;
r -= 1;
last = l;
}
}
}
for (int i = 1; i <= n; ++i){
if (anss.top() == n){
cout << anss.top() << " ";
}
else{
cout << anss.top() % n << " ";
}
anss.pop();
}
return 0;
}
90分记录