#include <bits/stdc++.h>
using namespace std;
const int max1 = 1e5;
vector<int> adj[max1];
vector<int> ans;
vector<int> color, val, gol;
void dfs(int node, int even, int odd, int level) {
  int curr;
  if (level % 2 == 1)
    curr = (val[node] + odd) % 2;
  else
    curr = (val[node] + even) % 2;
  if (curr != gol[node]) {
    ans.push_back(node);
    if (level % 2 == 1)
      odd = odd + 1;
    else
      even = even + 1;
  }
  level = level + 1;
  color[node] = 1;
  for (auto u : adj[node]) {
    if (color[u] == 0) {
      dfs(u, even, odd, level);
    }
    color[u] = 2;
  }
}
int main() {
  int n;
  cin >> n;
  int a, b;
  color.resize(n + 1, 0);
  for (int i = 0; i < n - 1; ++i) {
    cin >> a >> b;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  val.resize(n + 1);
  gol.resize(n + 1);
  for (int i = 1; i <= n; ++i) cin >> val[i];
  for (int i = 1; i <= n; ++i) cin >> gol[i];
  dfs(1, 0, 0, 1);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); ++i) cout << ans[i] << endl;
}
