#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100000 + 10;
vector<int> G[MAX_N], ans;
int l[MAX_N], goal[MAX_N], n, x, y, dep[MAX_N], mark[MAX_N];
void dfs(int u, int a, int b) {
  mark[u] = 1;
  int aa, bbb;
  aa = a;
  bbb = b;
  if (dep[u] % 2 == 1) {
    if (b == 1) {
      l[u] = 1 - l[u];
    }
  } else {
    if (a == 1) {
      l[u] = 1 - l[u];
    }
  }
  if (l[u] != goal[u]) {
    ans.push_back(u);
    if (dep[u] % 2 == 0) {
      aa = 1 - aa;
    } else {
      bbb = 1 - bbb;
    }
  }
  for (int i = 0; i < G[u].size(); i++)
    if (mark[G[u][i]] == 0) {
      dep[G[u][i]] = dep[u] + 1;
      dfs(G[u][i], aa, bbb);
    }
}
int main() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    cin >> x >> y;
    G[x].push_back(y);
    G[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    cin >> l[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> goal[i];
  }
  dfs(1, 0, 0);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i] << endl;
  }
}
