#include <bits/stdc++.h>
using namespace std;
int n;
vector<long long> adj[(long long)1e5 + 1], ans;
bool ini[(long long)1e5 + 1], goal[(long long)1e5 + 1];
void dfs(int s, int e, int o, int l, int p) {
  if (l & 1) {
    if (o & 1) ini[s] = (!ini[s]);
  } else {
    if (e & 1) ini[s] = (!ini[s]);
  }
  if (ini[s] != goal[s]) {
    ans.push_back(s);
    if (l & 1)
      o++;
    else
      e++;
  }
  for (int i : adj[s]) {
    if (i != p) {
      dfs(i, e, o, l + 1, s);
    }
  }
}
int main(void) {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (__typeof(n - 1) i = (0) - ((0) > (n - 1));
       i != (n - 1) - ((0) > (n - 1)); i += 1 - 2 * ((0) > (n - 1))) {
    int x, y;
    cin >> x >> y;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  for (__typeof(n + 1) i = (1) - ((1) > (n + 1));
       i != (n + 1) - ((1) > (n + 1)); i += 1 - 2 * ((1) > (n + 1)))
    cin >> ini[i];
  for (__typeof(n + 1) i = (1) - ((1) > (n + 1));
       i != (n + 1) - ((1) > (n + 1)); i += 1 - 2 * ((1) > (n + 1)))
    cin >> goal[i];
  dfs(1, 0, 0, 0, -1);
  cout << (long long)ans.size() << '\n';
  for (int i : ans) cout << i << '\n';
}
