#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  std::vector<std::vector<int> > tree(n);
  for (int i = 1; i < n; ++i) {
    int x, y;
    std::cin >> x >> y;
    --x;
    --y;
    tree[x].push_back(y);
    tree[y].push_back(x);
  }
  std::vector<bool> used(n, false);
  std::vector<int> value(n);
  std::vector<int> k(n);
  for (int i = 0; i < n; ++i) {
    cin >> value[i];
  }
  for (int i = 0; i < n; ++i) {
    std::cin >> k[i];
  }
  std::vector<int> queue(1, 0);
  std::vector<std::pair<int, int> > queues(1, make_pair(0, 0));
  used[0] = true;
  std::vector<int> ans;
  for (int i = 0; i < queue.size(); ++i) {
    int node = queue[i];
    std::pair<int, int> p = queues[i];
    if (((value[node] + p.first) % 2) != k[node]) {
      p.first++;
      ans.push_back(node);
    }
    swap(p.first, p.second);
    for (int j = 0; j < tree[node].size(); ++j) {
      if (!used[tree[node][j]]) {
        used[tree[node][j]] = true;
        queue.push_back(tree[node][j]);
        queues.push_back(p);
      }
    }
  }
  std::cout << ans.size() << std::endl;
  for (int i = 0; i < ans.size(); ++i) {
    std::cout << ans[i] + 1 << std::endl;
  }
}
