#include<bits/stdc++.h>
using namespace std;
bool a[21][21],used[21],youzuidazhi=0;
int dilei[21],ans=0,n,way[21],k=0,path[21],mk;
bool check(int x)
{
for(int i=1;i<=n;i++)
{
if(a[x][i]&&!used[i])
return false;
}
return true;
}
void dfs(int d,int x)
{
if(check(d))
{
if(x>ans)
{
youzuidazhi=1;
ans=x;
mk=k;
for(int i=1;i<=k;i++)
{
path[i]=way[i];
}
}
k=0;
return;
}
for(int i=1;i<=n;i++)
{
if(a[d][i]&&!used[i]&&i!=d)
{
used[i]=1;
way[++k]=i;
dfs(i,x+dilei[i]);
used[i]=0;
}
}
}
int main()
{
int im;
cin>>n;
for(int i=1;i<=n;i++) cin>>dilei[i];
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
cin>>a[i][j];
}
for(int i=1;i<=n;i++)
{
dfs(i,dilei[i]);
if(youzuidazhi) im=i;
youzuidazhi=0;
}
printf("%d ",im);
for(int i=1;i<=mk;i++) printf("%d ",path[i]);
printf("\n");
printf("%d",ans);
}