#include <bits/stdc++.h>
const int INF = 0x3f3f3f3f;
const long long INFL = 0x3f3f3f3f3f3f3f3f;
const double Pi = acos(-1.0);
using namespace std;
template <class T>
void tomax(T& a, T b) {
  a = max(a, b);
}
template <class T>
void tomin(T& a, T b) {
  a = min(a, b);
}
const int N = 1e5 + 5;
const int M = 1e5 + 5;
vector<int> e[N];
int d1[N], d2[N];
vector<int> outnum;
void dfs(int nowid, int f, int k1, int k2, int h) {
  if (h & 1 && k1) d1[nowid] ^= 1;
  if (!(h & 1) && k2) d1[nowid] ^= 1;
  if (d1[nowid] != d2[nowid]) {
    if (h & 1)
      k1 ^= 1;
    else
      k2 ^= 1;
    outnum.push_back(nowid);
  }
  for (auto v : e[nowid]) {
    if (v != f) dfs(v, nowid, k1, k2, h + 1);
  }
  return;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n - 1; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    e[u].push_back(v);
    e[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) scanf("%d", &d1[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &d2[i]);
  dfs(1, -1, 0, 0, 0);
  printf("%d\n", outnum.size());
  for (int i = 0; i < outnum.size(); i++) {
    printf("%d\n", outnum[i]);
  }
  return 0;
}
