#include<bits/stdc++.h>
using namespace std;
const int N = 205;
struct node{
int v,pre,num;
}f[N];
int a[N],res[N],cur;
int h[N],e[N],ne[N],idx;
void add(int u,int v){
e[idx] = u,ne[idx] = h[v],h[v] = idx++;
}
int main(){
memset(h,-1,sizeof(h));
int n,ans = 0;
cin >> n;
for(int i = 1;i <= n;i++) cin >> a[i];
int x,y;
while(cin >> x){
cin >> y;
if(x == 0 && y == 0) break;
if(x == y) continue;
add(x,y);
}
for(int i = 1;i <= n;i++) f[i].pre = -1;
for(int i = 1;i <= n;i++) f[i].num = 1;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++) f[j].v = 0;
f[i].v = a[i];
for(int j = 1;j <= n;j++){
for(int k = h[j];~k;k = ne[k]){
int v1 = e[k];
if(f[v1].v + a[j] > f[j].v){
f[j].v = f[v1].v + a[j];
f[j].pre = v1;
f[j].num++;
}
}
}
for(int j = 1;j <= n;j++){
if(f[j].v > ans){
ans = f[j].v;
int index = j,cnt = f[j].num;
while(index != -1){
res[cnt--] = index;
index = f[index].pre;
}
cur = f[j].num;
}
}
}
for(int i = 1;i <= cur;i++){
if(i == cur) cout << res[i];
else cout << res[i] << '-';
}
cout << '\n';
cout << ans << '\n';
return 0;
}