#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
int n;
bool init[MAXN], goal[MAXN];
vector<int> e[MAXN];
bool mark[MAXN];
bool even = true;
bool eo[2];
queue<int> ans;
void dfs(int v) {
  if (mark[v]) return;
  mark[v] = true;
  bool change = false;
  if ((init[v] != goal[v]) ^ eo[even]) {
    ans.push(v + 1);
    eo[even] = !eo[even];
    change = true;
  }
  for (int i = 0; i < e[v].size(); i++) {
    int u = e[v][i];
    even = !even;
    dfs(u);
    even = !even;
  }
  if (change) eo[even] = !eo[even];
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    e[u].push_back(v);
    e[v].push_back(u);
  }
  for (int i = 0; i < n; i++) cin >> init[i];
  for (int i = 0; i < n; i++) cin >> goal[i];
  dfs(0);
  cout << ans.size() << endl;
  while (ans.size() > 0) {
    cout << ans.front() << endl;
    ans.pop();
  }
  return 0;
}
