#include <bits/stdc++.h>
using namespace std;
int n, head[100005], cnt, dp[100005][2], t[100005];
int d[100005], k[100005];
struct edge {
  int next, to;
} e[200005];
int add(int a, int b) {
  cnt++;
  e[cnt].next = head[a];
  e[cnt].to = b;
  head[a] = cnt;
  return 0;
}
int dfs(int now, int fa) {
  if (d[now] != k[now]) {
    if (dp[fa][1] % 2 == 1) {
      dp[now][0] = dp[fa][1];
      dp[now][1] = dp[fa][0];
    } else {
      cnt++;
      t[cnt] = now;
      dp[now][0] = dp[fa][1] + 1;
      dp[now][1] = dp[fa][0];
    }
  } else {
    if (dp[fa][1] % 2 == 1) {
      cnt++;
      t[cnt] = now;
      dp[now][0] = dp[fa][1] + 1;
      dp[now][1] = dp[fa][0];
    } else {
      dp[now][0] = dp[fa][1];
      dp[now][1] = dp[fa][0];
    }
  }
  for (int i = head[now]; i != 0; i = e[i].next) {
    if (e[i].to != fa) {
      dfs(e[i].to, now);
    }
  }
  return 0;
}
int main() {
  int i, a, b;
  scanf("%d", &n);
  for (i = 1; i < n; i++) {
    scanf("%d%d", &a, &b);
    add(a, b);
    add(b, a);
  }
  cnt = 0;
  for (i = 1; i <= n; i++) {
    scanf("%d", &d[i]);
  }
  for (i = 1; i <= n; i++) {
    scanf("%d", &k[i]);
  }
  dfs(1, 0);
  printf("%d", cnt);
  for (i = 1; i <= cnt; i++) {
    printf("\n%d", t[i]);
  }
  return 0;
}
