#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<int>> G;
int S[100010];
int T[100010];
vector<int> R;
void dfs(int pos, int pre, int f1, int f2) {
  if ((S[pos] ^ f1) != T[pos]) {
    f1 ^= 1;
    R.push_back(pos + 1);
  }
  for (int i = 0; i < G[pos].size(); i++) {
    if (G[pos][i] != pre) {
      dfs(G[pos][i], pos, f2, f1);
    }
  }
  return;
}
int main() {
  cin >> n;
  G.resize(n);
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    u--, v--;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  for (int i = 0; i < n; i++) {
    cin >> S[i];
  }
  for (int i = 0; i < n; i++) {
    cin >> T[i];
  }
  dfs(0, -1, 0, 0);
  cout << R.size() << endl;
  for (int i = 0; i < R.size(); i++) {
    cout << R[i] << endl;
  }
  return 0;
}
