/*
关键子工程--关键路径
*/
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<stack>
using namespace std;
const int M=305;
int n;
struct linklist
{
int s;
int val;
linklist *next;
};
linklist map[M*2];
linklist fmap[M*2];
stack<int>s1;
stack<int>s2;
int time[M];
int gc[M][M];
int co[M];
int ltv[M];
int etv[M];
bool flag=1;
void debug()
{
for (int i=1; i<=n+1; i++)
{
printf("%d ", ltv[i]);
}
printf("\n");
}
bool toposort()
{
//debug();
int tj=0;
for (int i=1; i<=n+1; i++) if (!co[i]) s1.push(i);
if (s1.empty()) return false;
while (!s1.empty())
{
int v=s1.top();
s2.push(v);
s1.pop();
co[v]=n*2;
tj++;
for (linklist *j=map[v].next; j!=NULL; j=j->next)
{
int t=j->s;
co[t]--;
if (!co[t]) s1.push(t);
if (etv[v] + j->val > etv[t]) etv[t]=etv[v]+j->val;
}
}
if (tj<n+1) return false;
return true;
}
void solve()
{
if (!toposort()) {
flag=0;
return;
}
for (int i=1; i<=n+1; i++)
{
ltv[i]=etv[n+1];
}
while (!s2.empty())
{
int v=s2.top();
s2.pop();
for (linklist *j=fmap[v].next; j!=NULL; j=j->next)
{
int t=j->s;
if (ltv[v]-j->val < ltv[t]) ltv[t]=ltv[v]-j->val;
}
}
}
void insert(linklist &x, int y, int val)
{
linklist *t;
t=new(linklist);
t->val=val;
t->s=y;
t->next=x.next;
x.next=t;
}
void init()
{
memset(etv, 0, sizeof(etv));
memset(time, 0, sizeof(time));
memset(gc, 0, sizeof(gc));
memset(co, 0, sizeof(co));
scanf("%d", &n);
for (int i=1; i<=n+1; i++)
{
map[i].next=NULL;
map[i].s=i;
fmap[i].next=NULL;
fmap[i].s=i;
}
for (int i=1; i<=n; i++) scanf("%d", &time[i]);
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{
if (i!=j)
{
scanf("%d", &gc[i][j]);
if (gc[i][j]) {
insert(map[j], i, time[j]);
co[i]++;
insert(fmap[i], j, time[j]);
}
}
}
for (int i=1; i<=n; i++)
{
if (map[i].next==NULL) {
insert(map[i], n+1, time[i]);
co[n+1]++;
insert(fmap[n+1], i, time[i]);
}
}
}
int main()
{
freopen("project.in", "r", stdin);
freopen("project.out", "w", stdout);
init();
solve();
if (!flag){
printf("-1");
}
else
{
printf("%d\n", etv[n+1]);
for (int i=1; i<=n; i++){
if (etv[i]==ltv[i]) printf("%d ", i);
}
}
//debug();
return 0;
}