#include<bits/stdc++.h>
using namespace std;
const int N=310;
int n;
int a[N];
int f[N][N];
int path[N][N];
struct node{
int l,r;
};
queue<node> q;
vector<int> res;
void print(){
q.push({1,n});
while(!q.empty()){
int l=q.front().l;
int r=q.front().r;
q.pop();
if(l==r) continue;
int k=path[l][r];
res.push_back(k);
q.push({l,k});
q.push({k+1,r});
}
for(auto x:res){
cout<<x<<" ";
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int len=2;len<=n;len++){
for(int l=1;l+len-1<=n;l++){
int r=l+len-1;
for(int k=l;k<r;k++){
//f[l][r]=max(f[l][r],f[l][k]+f[k+1][r]+(a[l]+a[r])*a[k]);
int val=f[l][k]+f[k+1][r]+(a[l]+a[r])*a[k];
if(val>f[l][r]){
f[l][r]=val;
path[l][r]=k;
}
}
}
}
cout<<f[1][n]<<endl;;
print();
return 0;
}