#include <bits/stdc++.h>
using namespace std;
char nc() {
  static char buf[1048576], *p1 = buf, *p2 = buf;
  if (p1 == p2) {
    p1 = buf;
    p2 = buf + fread(buf, 1, 1048576, stdin);
  }
  return *p1++;
}
int scan() {
  int sig = 1, sum = 0;
  char f = nc();
  while ((f < '0' || f > '9') && f != '-') f = nc();
  if (f == '-') {
    sig = -1;
    f = nc();
  }
  while (f >= '0' && f <= '9') {
    sum = sum * 10 + f - '0';
    f = nc();
  }
  sum *= sig;
  return sum;
}
const int N = 100010;
int n, g[N], f[N], cnt, ans[N];
vector<int> e[N];
void dfs(int x, int fa, int nfa, int npa) {
  if (npa % 2) f[x] = !f[x];
  int op = 0;
  if (f[x] != g[x]) {
    op = 1;
    ++cnt;
    ans[cnt] = x;
  }
  for (int i = 0; i < e[x].size(); ++i) {
    if (e[x][i] != fa) {
      dfs(e[x][i], x, npa + op, nfa);
    }
  }
}
int main() {
  n = scan();
  for (int i = 2; i <= n; ++i) {
    int t1, t2;
    t1 = scan();
    t2 = scan();
    e[t1].push_back(t2);
    e[t2].push_back(t1);
  }
  for (int i = 1; i <= n; ++i) f[i] = scan();
  for (int i = 1; i <= n; ++i) g[i] = scan();
  dfs(1, 0, 0, 0);
  printf("%d\n", cnt);
  for (int i = 1; i <= cnt; ++i) {
    printf("%d\n", ans[i]);
  }
  return 0;
}
