#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 定義一個極大值代表無限大,防止溢位使用長整數
const long long INF = 1e18;
void solve() {
int n;
while (cin >> n && n != 0) {
vector<long long> a(n + 1, 0);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
// dp[i] 表示停在第 i 個休息站的最小懲罰總和
vector<long long> dp(n + 1, INF);
// parent[i] 用來記錄第 i 個休息站是從哪一個休息站過來的
vector<int> parent(n + 1, -1);
// 起點(第 0 個站)的懲罰值為 0
dp[0] = 0;
// 動態規劃轉移
for (int i = 1; i <= n; ++i) {
for (int j = 0; j < i; ++j) {
long long miles = a[i] - a[j];
long long penalty = (200 - miles) * (200 - miles);
if (dp[j] + penalty < dp[i]) {
dp[i] = dp[j] + penalty;
parent[i] = j;
}
}
}
// 從終點 n 開始回溯找到完整路徑
vector<int> path;
int curr = n;
while (curr != -1) {
path.push_back(curr);
curr = parent[curr];
}
// 因為回溯是由後往前,我們需要反轉回正確的順序
reverse(path.begin(), path.end());
// 輸出結果
for (size_t i = 0; i < path.size(); ++i) {
cout << path[i] << (i + 1 == path.size() ? "" : " ");
}
cout << "\n";
}
}
int main() {
// 優化標準輸入輸出流
ios_base::sync_with_stdio(false);
cin.tie(NULL);
solve();
return 0;
}