#include<bits/stdc++.h>
using namespace std;
int a[21];
int n;
int m[21][21];
bool use[21];
int ans=-1e9;
int aw[21],ak[21];
int pd(int o)
{
for(int i=1;i<=n;++i)
{
if(m[i][o]==1&&use[i]==0)
{
return false;
}
}
return true;
}
void dfs(int local,int sum,int num)
{
if(pd(local))
{
if(sum>ans)
{
memset(ak,0,sizeof(ak));
for(int i=1;i<=num;++i)
{
ak[i]=aw[i];
}
}
ans=max(ans,sum);
return;
}
else
{
for(int i=1;i<=n;++i)
{
if(m[i][local]==1&&use[i]==0)
{
use[i]=1;
aw[num]=i;
dfs(i,sum+a[i],num+1);
use[i]=0;
aw[num]=0;
}
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
memset(m,-1,sizeof(m));
for(int i=1;i<=n-1;++i)
{
for(int j=i+1;j<=n;++j)
{
int k;
cin>>k;
m[i][j]=k;
m[j][i]=k;
}
}
for(int i=1;i<=n;++i)
{
use[i]=1;
aw[1]=i;
dfs(i,a[i],2);
}
for(int i=1;i<=20;++i)
{
if(ak[i]!=0)cout<<ak[i]<<" ";
}
cout<<endl<<ans;
}