#include <bits/stdc++.h>
using namespace std;
int n;
int bombs[25];
int mapp[25][25];
int vis[25];
int res[25];
int now=0;
int sum=0;
int maxx=0;
int maxxres[25];
void dfs(int pos){
int could=0;
for (int i=1;i<=n;i++){
if (mapp[pos][i]&&!vis[i]){
could++;
vis[i]=1;
res[++now]=i;
sum+=bombs[i];
dfs(i);
vis[i]=0;
res[--now]=0;
sum-=bombs[i];
}
}
if (!could){
if (sum>maxx){
maxx=sum;
copy(begin(res),end(res),begin(maxxres));
}
return;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>bombs[i];
for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)cin>>mapp[i][j];
for(int i=1;i<=n;i++){
vis[i]=1;
res[++now]=i;
sum+=bombs[i];
dfs(i);
vis[i]=0;
res[--now]=i;
sum-=bombs[i];
}
int i=1;
while (maxxres[i]){
cout<<maxxres[i]<<' ';
i++;
}
cout<<endl<<maxx;
return 0;
}