#include <bits/stdc++.h>
using namespace std;
vector<list<long int> > v(100001);
long int visited[100001] = {0};
long int predecessor[100001] = {0};
long long int n;
vector<long int> ans;
long int init[100001], goal[100001], cnt[100001];
void DFS(long int i, long int no_picks, long int no_flips) {
  long int a, b, p;
  visited[i] = 1;
  if (i == 1) {
    if (init[i] != goal[i]) {
      a = no_picks + 1;
      b = no_flips + 1;
      ans.push_back(i);
    } else {
      a = no_picks;
      b = no_flips;
    }
  } else {
    p = no_picks - no_flips;
    if (init[i] != goal[i]) {
      if (p % 2 == 0) {
        a = no_picks + 1;
        b = p + 1;
        ans.push_back(i);
      } else {
        a = no_picks;
        b = p;
      }
    } else {
      if (p % 2 == 1) {
        a = no_picks + 1;
        b = p + 1;
        ans.push_back(i);
      } else {
        a = no_picks;
        b = p;
      }
    }
  }
  for (list<long int>::iterator it = v[i].begin(); it != v[i].end(); ++it) {
    if (visited[*it] == 0) {
      predecessor[*it] = i;
      DFS(*it, a, b);
    }
  }
}
int main() {
  long int i, j, a, b;
  cin >> n;
  for (i = 1; i < n; i++) {
    cin >> a >> b;
    v[a].push_front(b);
    v[b].push_front(a);
  }
  for (i = 1; i <= n; i++) {
    cin >> init[i];
  }
  for (i = 1; i <= n; i++) {
    cin >> goal[i];
  }
  for (i = 1; i <= n; i++) {
    if (visited[i] == 0) {
      DFS(i, 0, 0);
    }
  }
  cout << ans.size() << "\n";
  for (vector<long int>::iterator it = ans.begin(); it != ans.end(); it++) {
    cout << *it << "\n";
  }
  return 0;
}
