#include <bits/stdc++.h>
using namespace std;
int n, m;
int visited[200001];
int colour[200001];
vector<int> adj_list[200001];
int* graph[1000001];
int* finalcolour[1000001];
int size[1000001];
int check;
int count1 = 0;
int k[9];
int l[9];
int dp[9][1001];
int A[9][11];
int c[9][10];
bool pairCompare(const pair<int, int>& firstElem,
                 const pair<int, int>& secondElem) {
  return firstElem.first > secondElem.first;
}
int solve(int cards, int coins) {
  int i;
  if (cards <= 0) return 0;
  if (dp[cards][coins] != -1) return dp[cards][coins];
  int ret = A[cards][l[cards]] + solve(cards - 1, coins);
  int use = 0;
  int coins_left = coins;
  for (i = l[cards] + 1; i <= k[cards]; i++) {
    coins_left = coins_left - c[cards][i - 1];
    if (coins_left >= 0)
      ret = max(ret, A[cards][i] + solve(cards - 1, coins_left));
    else
      break;
  }
  dp[cards][coins] = ret;
  return ret;
}
long long powe(long long a, long long b, long long k) {
  if (b == 0) return 1;
  long long temp = powe(a, b / 2, k);
  temp *= temp;
  if (temp >= k) temp %= k;
  if (b % 2 == 1) temp *= a;
  if (temp >= k) temp %= k;
  return temp;
}
void dfs(int x) {
  int i;
  visited[x] = 1;
  for (i = 0; i < adj_list[x].size(); i++) {
    if (visited[adj_list[x][i]] == 0) {
      printf("%d ", x);
      if (colour[x] == -1) {
        colour[x] = 1;
      } else {
        colour[x] = -1;
      }
      dfs(adj_list[x][i]);
      if (colour[adj_list[x][i]] == -1) {
        printf("%d %d ", x, adj_list[x][i]);
        colour[adj_list[x][i]] = 1;
        if (colour[x] == -1) {
          colour[x] = 1;
        } else {
          colour[x] = -1;
        }
      }
    }
  }
  printf("%d ", x);
  if (colour[x] == -1) {
    colour[x] = 1;
  } else {
    colour[x] = -1;
  }
}
int main() {
  int n, i, count = 0;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &colour[i]);
    visited[i] = 0;
    if (colour[i] == 1) count++;
  }
  for (i = 1; i < n; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    adj_list[x].push_back(y);
    adj_list[y].push_back(x);
  }
  if (count == n) {
    printf("1\n");
    return 0;
  }
  if (colour[1] == -1)
    colour[1] = 1;
  else
    colour[1] = -1;
  dfs(1);
  if (colour[1] == -1) {
    printf("%d 1 %d ", adj_list[1][0], adj_list[1][0]);
  }
  return 0;
}
