#include<bits/stdc++.h>
using namespace std;
int n;int k,memo[35],ma[35],ml,m3,k2,ml2,ma2[35];
struct node{
int p[35];
int l;
int len;
}a[35];
int dfs(int deep){
if(deep==n){
return memo[deep-1];
}
if(memo[deep]!=0){
return memo[deep];
}
int b,c,ma2;
memo[deep]=a[deep].l;
for(int i=0;i<a[deep].len;i++){
b=a[deep].l+dfs(a[deep].p[i]);
c=memo[deep];
if(b>c){
ma2=a[deep].p[i];
memo[deep]=b;
}
else{
memo[deep]=c;
}
}
if(ma2!=0){
ma[ml]=ma2;
ml++;
}
return memo[deep];
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].l;
}
for(int i=0;i<n;i++){
a[i].len=0;
for(int j=i+1;j<n;j++){
cin>>k;
if(k==1){
a[i].p[a[i].len]=j;a[i].len+=1;
}
}
}
k=-1;
for(int i=0;i<n;i++){
ml=0;
k2=dfs(i);
if(k2>k){
m3=i+1;
k=k2;
ml2=ml;
for(int j=0;j<ml2;j++){
ma2[j]=ma[j];
}
}
}
cout<<m3;
for(int i=ml2-1;i>=0;i--){
cout<<" "<<ma2[i]+1;
}
cout<<endl<<k;
return 0;
}