#include<bits/stdc++.h>
using namespace std;
int x,n,f,ans2,ans[50],a[50],steps[50];
bool g[50][50],vis[50];
void dfs(int x,int s,int t)
{
int flag=1;
for(int i=x+1;i<=n;i++)
{
if(g[x][i] && !vis[i])
{
flag=0;
}
}
if(flag && ans2<s)
{
ans2=s;
f=t;
for(int i=1;i<=t;i++)
{
ans[i]=steps[i];
}
}
if(flag)
{
return;
}
for(int i=x+1;i<=n;i++)
{
if(g[x][i] && !vis[i])
{
steps[t+1]=i;
vis[i]=1;
dfs(i,s+a[i],t+1);
steps[t+1]=0;
vis[i]=0;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n-1;i++)
{
for(int j=i+1;j<=n;j++)
{
cin>>x;
g[i][j]=x;
}
}
for(int i=1;i<=n;i++)
{
steps[1]=i;
vis[i]=1;
dfs(i,a[i],1);
vis[i]=0;
}
for(int i=1;i<=f;i++)
{
cout<<ans[i]<<" ";
}
cout<<endl<<ans2<<endl;
return 0;
}