#include<iostream>
using namespace std;
int n,a[50],dp[50][50],root[50][50];
void dfs(int x,int y)
{
int t=root[x][y];
cout<<t<<" ";
dfs(x,t-1);
dfs(t+1,y);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
{
dp[i][i]=a[i];
root[i][i]=i;
}
for(int i=1;i<=n;i++)
for(int l=1;l+i-1<=n;l++)
{
int r=l+i-1;
int temp,maxx=-0x3f3f3f3f;
for(int k=l;k<=r;k++)
{
if(k==l)
temp=max(dp[l][r],a[k]+dp[k+1][r]);
else if(k==r)
temp=max(dp[l][r],a[k]+dp[l][k-1]);
else
temp=max(dp[l][r],a[k]+dp[l][k-1]*dp[k+1][r]);
if(temp>maxx)
{
maxx=temp;
root[l][r]=k;
}
}
dp[l][r]=maxx;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<root[i][j]<<" ";
cout<<endl;
}
cout<<dp[1][n]<<endl;
dfs(1,n);
return 0;
}