#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long powmod(long long a, long long b, long long MOD) {
  long long ans = 1;
  while (b) {
    if (b % 2) ans = ans * a % MOD;
    a = a * a % MOD;
    b /= 2;
  }
  return ans;
}
const int N = 2e5 + 11;
vector<int> v[N], ans;
int n, a[N], b[N];
void dfs(int now, int pre, int deep, int l = 0, int r = 0) {
  if (deep) {
    if (l & 1) a[now] ^= 1;
  } else {
    if (r & 1) a[now] ^= 1;
  }
  if (a[now] != b[now]) {
    ans.push_back(now);
    a[now] ^= 1;
    if (deep)
      l++;
    else
      r++;
  }
  for (auto k : v[now]) {
    if (k == pre) continue;
    dfs(k, now, deep ^ 1, l, r);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i < n; i++) {
    int s, t;
    cin >> s >> t;
    v[s].push_back(t);
    v[t].push_back(s);
  }
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) cin >> b[i];
  dfs(1, 0, 0);
  cout << ans.size() << endl;
  for (auto k : ans) cout << k << '\n';
  return 0;
}
