1 #include<iostream>
2 #include<cstdio>
3 #include<cmath>
4 using namespace std;
5 const int MAXN=21;
6 int a[MAXN];
7 int map[MAXN][MAXN];
8 int f[MAXN];
9 int pre[MAXN+5];
10 int pd;
11 int out(int x)
12 {
13 if(pre[x]!=x)
14 out(pre[x]);
15 printf("%d ",x);
16 }
17 int main()
18 {
19 int n;
20 scanf("%d",&n);
21 for(int i=1;i<=n;i++)
22 scanf("%d",&a[i]);
23 for(int i=1;i<=n;i++)
24 f[i]=a[i];
25 pre[1]=1;
26 for(int i=1;i<=n-1;i++)
27 {
28 for(int j=i+1;j<=n;j++)
29 {
30 scanf("%d",&pd);
31 if(pd==1)map[i][j]=1;
32 else map[i][j]=0;
33 }
34 }
35 if(n==2&&map[1][2]==0)
36 {
37 printf("2\n%d",a[2]);
38 return 0;
39 }
40 for(int i=1;i<=n;i++)
41 {
42 for(int j=1;j<=n;j++)
43 {
44 if(map[i][j]==1)
45 {
46 if(f[i]+a[j]>f[j])
47 pre[j]=i;
48 f[j]=max(f[i]+a[j],f[j]);
49
50 }
51 }
52 }
53 int ans=0;
54 int where;
55 for(int i=1;i<=n;i++)
56 if(f[i]>ans)ans=f[i],where=i;
57 out(where);
58 printf("\n");
59 printf("%d",ans);
60 return 0;
61 }