#include <bits/stdc++.h>
using namespace std;
int n, u, v, c[100000], g[100000], visited[100000], cnt;
vector<int> adj[100000], res;
void bfs(int x, int a, int b, int d) {
  if (visited[x]) return;
  int p = a, q = b;
  if (d % 2 == 0) {
    if (a % 2 == 0) {
      if (c[x] == g[x]) {
        p = a, q = b;
      } else {
        p++;
        cnt++;
        res.push_back(x + 1);
      }
    } else {
      if (c[x] == g[x]) {
        p++;
        cnt++;
        res.push_back(x + 1);
      } else {
        p = a, q = b;
      }
    }
  } else {
    if (b % 2 == 0) {
      if (c[x] == g[x]) {
        p = a, q = b;
      } else {
        q++;
        cnt++;
        res.push_back(x + 1);
      }
    } else {
      if (c[x] == g[x]) {
        q++;
        cnt++;
        res.push_back(x + 1);
      } else {
        p = a, q = b;
      }
    }
  }
  visited[x] = 1;
  for (int i = 0; i < adj[x].size(); i++) {
    bfs(adj[x][i], p, q, d + 1);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &u, &v);
    u--, v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  for (int i = 0; i < n; i++) scanf("%d", &c[i]);
  for (int i = 0; i < n; i++) scanf("%d", &g[i]);
  bfs(0, 0, 0, 0);
  printf("%d\n", cnt);
  for (int i = 0; i < cnt; i++) {
    printf("%d\n", res[i]);
  }
  return 0;
}
