#include<iostream>
using namespace std;
int n;
int p=0;
int tree[40];
int dp[40][40];
int root[40][40];
int a[40];
void built(int l ,int r)
{
    int at=l;
    dp[l][l]=a[l],dp[r][r]=a[r];
    if(l!=r) 
        for(int i=l;i<=r;i++) dp[l][r]+=a[i];
    for(int k=l;k<=r;k++)
    {
        int ll=dp[l][k-1],rr=dp[k+1][r];
       if(!dp[l][k]) ll=1;
        if(!dp[k][r]) rr=1;
       if(ll*rr+a[k]>dp[l][r])
       {
           dp[l][r]=ll*rr+a[k];
           at=k;
        }
      
    }
    root[l][r]=at;
    
    return ;
}
void find(int l,int r)
{
//     cout<<l<<" "<<r<<endl;
    if(l==r) 
    {
        tree[p]=l;
        return ;
    }
   
    int at=root[l][r];
    tree[p]=at;
    if(at-1>=l)
    {
        
    p++;
    find(l,at-1);
    }
    if(at+1<=r)
    {
        
    p++;
    find(at+1,r);
        }
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        for(int j=i;j>=1;j--)
        {
            built(j,i);
//             cout<<j<<" "<<i<<" "<<dp[j][i]<<" "<<root[j][i]<<endl;
        }
//         cout<<"----"<<endl;
    }
//     for(int i=1;i<=n;i++)
//     {
//         for(int j=1;j<=i;j++)
//             cout<<dp[i][j]<<" ";
//         cout<<endl;
//     }

            
    cout<<dp[1][n]<<endl;
    find(1,n);
    for(int i=0;i<n;i++) cout<<tree[i]<<" ";
}