#include <iostream>
#include <cstring>
#include <algorithm>
#include <limits.h>
using namespace std;
const int N = 35;
int n;
int a[N];
int dp[N][N];
void dfs(int left, int right)
{
if (left > right) return;
if (left == right) {
cout << left << " ";
return;
}
int root = 0, ans = INT_MIN;
for (int i = left; i <= right; i++) {
int sum = dp[left][i - 1] * dp[i + 1][right] + a[i];
if (sum > ans) {
ans = sum;
root = i;
}
}
cout << root << " ";
dfs(left, root - 1);
dfs(root + 1, right);
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int len = 1; len <= n; len++) {
for (int i = 1; i + len - 1 <= n; i++) {
int j = i + len - 1;
if (i == j) dp[i][j] = a[i];
else {
dp[i][j] = INT_MIN;
for (int k = i; k <= j; k++) {
dp[i][j] = max(dp[i][j], dp[i][k - 1] * dp[k + 1][j] + a[k]);
}
}
}
}
cout << dp[1][n] << endl;
dfs(1, n);
return 0;
}