#include <bits/stdc++.h>
using namespace std;
vector<int> v[100005], ans;
int in[100005], out[100005], ti = 0, h[100005], a[100005], b[100005],
                             bit[2][300005];
void upd(int idx, int i) {
  while (i <= 300004) {
    bit[idx][i]++;
    i += i & -i;
  }
}
int sum(int idx, int i) {
  int s = 0;
  while (i) {
    s += bit[idx][i];
    s %= 2;
    i -= i & -i;
  }
  return s;
}
void dfs(int at, int p, int hh) {
  in[at] = ++ti;
  h[at] = hh;
  for (__typeof(v[at].begin()) it = v[at].begin(); it != v[at].end(); it++) {
    int to = *it;
    if (to != p) {
      dfs(to, at, hh + 1);
    }
  }
  out[at] = ++ti;
}
void dfs(int at, int p) {
  int second = (a[at] + sum(h[at] % 2, in[at])) % 2;
  if (second < 0) second += 2;
  if (second != b[at]) {
    ans.push_back(at);
    upd(h[at] % 2, in[at]);
    upd(h[at] % 2, out[at]);
  }
  for (__typeof(v[at].begin()) it = v[at].begin(); it != v[at].end(); it++) {
    int to = *it;
    if (to != p) dfs(to, at);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int n;
  cin >> n;
  for (int i = 1; i <= n - 1; i++) {
    int x, y;
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) cin >> b[i];
  dfs(1, 0, 0);
  dfs(1, 0);
  cout << ans.size();
  cout << "\n";
  for (__typeof(ans.begin()) it = ans.begin(); it != ans.end(); it++) {
    cout << *it;
    cout << "\n";
  }
  return 0;
}
