#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-9;
const int inf = (1 << 30) - 1;
const long long inf64 = ((long long)1 << 62) - 1;
const long double pi = acos(-1);
template <class T>
T sqr(T x) {
  return x * x;
}
template <class T>
T abs(T x) {
  return x < 0 ? -x : x;
}
const int MAXN = 120 * 1000;
vector<int> adj[MAXN];
int init[MAXN], goal[MAXN], color[MAXN];
bool used[MAXN];
vector<int> ans;
int ch[2];
void dfs_color(int v, int c) {
  used[v] = true;
  color[v] = c;
  for (int i = 0; i < adj[v].size(); ++i) {
    if (!used[adj[v][i]]) {
      dfs_color(adj[v][i], 1 - c);
    }
  }
}
void dfs(int v) {
  used[v] = true;
  bool key = false;
  if (goal[v] != (init[v] ^ ch[color[v]])) {
    ans.push_back(v);
    ch[color[v]] ^= 1;
    key = true;
  }
  for (int i = 0; i < adj[v].size(); ++i) {
    if (!used[adj[v][i]]) {
      dfs(adj[v][i]);
    }
  }
  if (key) {
    ch[color[v]] ^= 1;
  }
}
int main() {
  int n;
  cin >> n;
  int u1, u2;
  for (int i = 0; i < n - 1; ++i) {
    scanf("%d%d", &u1, &u2);
    u1--;
    u2--;
    adj[u1].push_back(u2);
    adj[u2].push_back(u1);
  }
  for (int i = 0; i < n; ++i) {
    scanf("%d", &init[i]);
  }
  for (int i = 0; i < n; ++i) {
    scanf("%d", &goal[i]);
  }
  dfs_color(0, 0);
  for (int i = 0; i < n; ++i) {
    used[i] = false;
  }
  ch[0] = 0;
  ch[1] = 0;
  dfs(0);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); ++i) {
    printf("%d\n", ans[i] + 1);
  }
  return 0;
}
