#include<iostream>
#include<algorithm>
using namespace std;
int a[50][50];
int n,w[50],ans[500],ans1[500],maxq,maxm,m;
bool l;
void dfs(int sum,int num,int q)
{
l=false;
if(sum==n+1)
{
for(int i=1;i<=n;i++)
{
cout<<ans1[i]<<" ";
}
cout<<endl<<q;
exit(0);
}
for(int i=1;i<num;i++)
{
if(a[num][i]==1)
{
l=true;
ans1[num+1]=i;
m++;
dfs(sum+1,i+num,q+w[num+i]);
}
}
if(l==false)
{
if(q>maxq)
{
for(int i=1;i<=m;i++)
{
ans[i]=ans1[i];
}
maxq=q;
maxm=m;
}
m=1;
return;
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>w[i];
}
int k=1;
for(int i=n-1;i>=1;i--)
{
for(int j=1;j<=i;j++)
{
cin>>a[k][j];
}
k++;
}
for(int i=1;i<=n;i++)
{
l=false;
m=1;
ans1[1]=i;
dfs(0,i,0);
}
for(int i=1;i<=maxm;i++)
{
cout<<ans[i]<<" ";
}
cout<<endl<<maxq;
return 0;
}