#include <bits/stdc++.h>
using namespace std;
bool vis[100005];
vector<vector<int> > adj;
int init[100005], goal[100005];
vector<int> v;
void dfs(int s, int odd, int even, int lev) {
  vis[s] = true;
  if ((lev & 1) && ((init[s] + odd) % 2) != goal[s]) {
    odd++;
    v.push_back(s);
  }
  if ((!(lev & 1)) && ((init[s] + even) % 2) != goal[s]) {
    even++;
    v.push_back(s);
  }
  for (int i = 0; i < adj[s].size(); ++i) {
    if (!vis[adj[s][i]]) {
      dfs(adj[s][i], odd, even, lev + 1);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  memset(vis, false, sizeof vis);
  int n, s, e;
  cin >> n;
  adj.resize(n + 1);
  for (int i = 1; i < n; ++i) {
    cin >> s >> e;
    adj[s].push_back(e);
    adj[e].push_back(s);
  }
  for (int i = 1; i <= n; ++i) {
    cin >> init[i];
  }
  for (int i = 1; i <= n; ++i) {
    cin >> goal[i];
  }
  dfs(1, 0, 0, 0);
  cout << v.size() << endl;
  for (int i = 0; i < v.size(); ++i) cout << v[i] << "\n";
  return 0;
}
