#include<bits/stdc++.h>
using namespace std;
int n,f[31],dp[101][101],m[31][31];
void dfs(int l,int r) {
if(l>r) return;
if(l==r) {
cout<<l<<' ';
return ;
}
cout<<m[l][r]<<' ';
dfs(l,m[l][r]-1);
dfs(m[l][r]+1,r);
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) cin>>f[i];
for(int i=1; i<=n; i++) {
dp[i][i]=f[i];
dp[i][i-1]=1;
}
for(int i=n; i>=1; i--) {
for(int j=i+1; j<=n; j++) {
for(int k=i; k<=j; k++) {
int cnt=dp[i][k-1]*dp[k+1][j]+dp[k][k];
dp[i][j]=max(dp[i][j],cnt);
if(dp[i][j]==cnt) m[i][j]=k;
}
}
}
cout<<dp[1][n]<<endl;
dfs(1,n);
return 0;
}