#include <bits/stdc++.h>
const int xn = 200001, xe = 399999;
int head[xn], next[xe], to[xe], N, E, fa[xn], q[xn], ue[xn], O[xn * 5], L,
    col[xn], D;
int main() {
  scanf("%d", &N);
  bool allblack = 1;
  for (int i = 1; i <= N; i++) {
    scanf("%d", col + i);
    if (col[i] == -1) allblack = 0;
  }
  if (allblack) {
    puts("1");
    return 0;
  }
  for (int i = 1, u, v; i < N; i++) {
    scanf("%d%d", &u, &v);
    next[++E] = head[u], to[E] = v, head[u] = E;
    next[++E] = head[v], to[E] = u, head[v] = E;
  }
  q[1] = 1;
  ue[1] = head[1];
  D = 1;
  O[L = 1] = 1;
  while (D) {
    if (to[ue[D]] == fa[q[D]]) ue[D] = next[ue[D]];
    if (ue[D]) {
      int To = to[ue[D]];
      ue[D] = next[ue[D]];
      O[++L] = To;
      fa[To] = q[D];
      q[++D] = To;
      ue[D] = head[To];
    } else {
      if (D > 1) {
        O[++L] = q[D - 1];
        col[q[D - 1]] *= col[q[D]];
      }
      D--;
    }
  }
  printf("1");
  for (int i = 1; i < L - 1; i++)
    if (O[i] == fa[O[i + 1]] && col[O[i + 1]] == 1)
      printf(" %d %d %d", O[i + 1], O[i], O[i + 1]);
    else
      printf(" %d", O[i + 1]);
  if (col[1] == 1) printf(" 1");
  puts("");
  return 0;
}
