#include <bits/stdc++.h>
using namespace std;
int a[100005], b[100005];
int s[100005], tot;
int le, ri;
vector<int> g[100005];
void dfs(int v, int dep, int pa) {
  int ss, i, j, k;
  ss = 0;
  if (dep % 2 == 0) {
    if ((le % 2 + a[v]) % 2 != b[v]) {
      s[tot++] = v;
      le++;
      ss = 1;
    }
  } else {
    if ((ri % 2 + a[v]) % 2 != b[v]) {
      s[tot++] = v;
      ri++;
      ss = 1;
    }
  }
  k = g[v].size();
  for (i = 0; i < k; i++) {
    if (g[v][i] != pa) {
      dfs(g[v][i], dep + 1, v);
    }
  }
  if (ss) {
    if (dep % 2 == 0) {
      le--;
    } else
      ri--;
  }
  return;
}
int main() {
  int i, j, k, n, m, p;
  while (cin >> n) {
    for (i = 1; i <= n; i++) g[i].clear();
    for (i = 0; i < n - 1; i++) {
      scanf("%d%d", &k, &p);
      g[k].push_back(p);
      g[p].push_back(k);
    }
    for (i = 1; i <= n; i++) scanf("%d", &a[i]);
    for (i = 1; i <= n; i++) scanf("%d", &b[i]);
    tot = 0;
    le = 0;
    ri = 0;
    dfs(1, 1, -1);
    printf("%d\n", tot);
    for (i = 0; i < tot; i++) {
      printf("%d\n", s[i]);
    }
  }
  return 0;
}
