#include <bits/stdc++.h>
using namespace std;
const int N = 30;
int g[N][N];
int n;
int a[N];
int ans;
bool vis[N];
int cnt, path;
bool pa[N];
vector<int> res;
int dfs(int x) {
cnt += a[x];
vis[x] = true;
for (int i = 0; i <= n; i++) {
if (g[x][i] == 1)
if (!vis[x + i])
dfs(x + i);
}
return cnt;
}
void pathfs(int t) {
res.push_back(t);
for (int i = 1; i <= n - t; i++) {
if (g[t][i])
if (!pa[t + i]) {
pa[t + i] = true;
pathfs(t + i);
}
}
return ;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= n - 1; i++)
for (int j = 1; j <= n - i; j++)
scanf("%d", &g[i][j + 1]);
for (int i = 1; i <= n ; i++) {
cnt = 0;
if (!vis[i]) {
int t = ans;
ans = max(ans, dfs(i));
if (ans != t)
path = i;
}
}
pathfs(path);
sort(res.begin(), res.end());
for (int i = 0; i < res.size(); i++)
printf("%d ", res[i]);
printf("\n");
printf("%d", ans);
return 0;
}