#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 15;
int N;
int init[MAXN];
int goal[MAXN];
vector<int> wr;
vector<int> g[MAXN];
inline int dfs(int nd, int pre, int first, int second) {
  int rev = 0;
  if (second) init[nd] ^= 1;
  if (init[nd] != goal[nd]) {
    rev++;
    wr.push_back(nd);
    second ^= 1;
  }
  for (vector<int>::iterator it = g[nd].begin(); it != g[nd].end(); it++)
    if (*it != pre) rev += dfs(*it, nd, second, first);
  return rev;
}
int main() {
  scanf("%d", &N);
  for (int a, b, i = 1; i < N; i++) {
    scanf("%d%d", &a, &b);
    g[a].push_back(b);
    g[b].push_back(a);
  }
  for (int i = 1; i <= N; i++) scanf("%d", init + i);
  for (int i = 1; i <= N; i++) scanf("%d", goal + i);
  printf("%d\n", dfs(1, 0, 0, 0));
  for (vector<int>::iterator it = wr.begin(); it != wr.end(); it++)
    printf("%d\n", *it);
  return 0;
}
