#include <bits/stdc++.h>
using namespace std;
template <class T1>
void deb(T1 e1) {
  cout << e1 << endl;
}
template <class T1, class T2>
void deb(T1 e1, T2 e2) {
  cout << e1 << " " << e2 << endl;
}
template <class T1, class T2, class T3>
void deb(T1 e1, T2 e2, T3 e3) {
  cout << e1 << " " << e2 << " " << e3 << endl;
}
template <class T1, class T2, class T3, class T4>
void deb(T1 e1, T2 e2, T3 e3, T4 e4) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << endl;
}
template <class T1, class T2, class T3, class T4, class T5>
void deb(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << endl;
}
template <class T1, class T2, class T3, class T4, class T5, class T6>
void deb(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5, T6 e6) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << " " << e6
       << endl;
}
vector<int> graph[100000 + 7], ans;
int ini[100000 + 7], target[100000 + 7];
void dfs(int form, int cur, int dep, int even, int odd) {
  if (dep & 1) {
    int temp = (ini[cur] + odd) % 2;
    if (temp != target[cur]) {
      ans.push_back(cur);
      odd = (odd + 1) % 2;
    }
  } else {
    int temp = (ini[cur] + even) % 2;
    if (temp != target[cur]) {
      ans.push_back(cur);
      even = (even + 1) % 2;
    }
  }
  for (int i = 0; i < graph[cur].size(); i++) {
    int v = graph[cur][i];
    if (v == form) continue;
    dfs(cur, v, dep + 1, even, odd);
  }
}
int main() {
  int n, v, u;
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d %d", &u, &v);
    graph[u].push_back(v);
    graph[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) scanf("%d", &ini[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &target[i]);
  dfs(-1, 1, 1, 0, 0);
  u = ans.size();
  deb(u);
  for (int i = 0; i < u; i++) deb(ans[i]);
  return 0;
}
