#include <bits/stdc++.h>
using namespace std;
int n,a[25],ans=-1,f[25];
bool b[25][25];
int curr[25],pt=0,route[25],len=0;
void save(){
for(int i=1;i<=pt;i++)route[i]=curr[i];
len=pt;
return;
}
void dfs(int p,int cur){
cur+=a[p];
if(cur<=f[p])return;
f[p]=cur;
curr[++pt]=p;
bool flag=true;
for(int i=p+1;i<=n;i++){
if(b[p][i]){
dfs(i,cur);
flag=false;
}
}
if(flag){
ans=cur;
save();
}
--pt;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<n;i++)for(int j=i+1;j<=n;j++){
cin>>b[i][j];
}
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++){
if(f[i]==0)dfs(i,0);
}
for(int i=1;i<=len;++i)cout<<route[i]<<"\n "[i!=len];
cout<<ans<<endl;
return 0;
}