#include <bits/stdc++.h>
using namespace std;
vector<int> graph[100005];
int a[100005], b[100005];
vector<int> ans;
void dfs(int source, int parent, int oddlevel, int evenlevel, int depth) {
  if (depth % 2 == 1)
    a[source] ^= oddlevel;
  else
    a[source] ^= evenlevel;
  if (a[source] != b[source]) {
    a[source] ^= 1;
    if (depth % 2 == 1)
      oddlevel++;
    else
      evenlevel++;
    oddlevel %= 2, evenlevel %= 2;
    ans.push_back(source);
  }
  for (int i = 0; i < graph[source].size(); i++) {
    int child = graph[source][i];
    if (child == parent) continue;
    dfs(child, source, oddlevel, evenlevel, depth + 1);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int x, y;
    cin >> x >> y;
    graph[x].push_back(y);
    graph[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, 0, 0);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i] << endl;
  }
  return 0;
}
