#include <bits/stdc++.h>
using namespace std;
vector<long long> v[1000000];
bool vis[1000000];
long long depth[1000000];
long long arr1[1000000];
long long arr2[1000000];
vector<long long> ans;
void bfs(long long u) {
  depth[u] = 1;
  long long time1 = 0, time2 = 0;
  if (arr1[1] != arr2[1]) {
    time1 = 1 - time1;
    ans.push_back(u);
  }
  queue<pair<long long, pair<long long, long long> > > st;
  st.push(make_pair(1, make_pair(time1, time2)));
  while (!st.empty()) {
    long long u = st.front().first;
    long long time11 = st.front().second.first;
    long long time21 = st.front().second.second;
    st.pop();
    for (long long i = 0; i < v[u].size(); i++) {
      long long time1 = time11;
      long long time2 = time21;
      long long s = v[u][i];
      if (depth[s]) continue;
      depth[s] = depth[u] + 1;
      if (depth[s] % 2 != 0) {
        if (time1) arr2[s] = 1 - arr2[s];
      } else {
        if (time2) arr2[s] = 1 - arr2[s];
      }
      if (arr1[s] != arr2[s]) {
        if (depth[s] % 2 != 0)
          time1 = 1 - time1;
        else
          time2 = 1 - time2;
        ans.push_back(s);
      }
      st.push(make_pair(s, make_pair(time1, time2)));
    }
  }
}
int main() {
  long long total, cnt, root, l, r;
  cin >> total;
  for (long long i = 1; i < total; i++) {
    cin >> l >> r;
    v[l].push_back(r);
    v[r].push_back(l);
  }
  for (long long i = 1; i <= total; i++) cin >> arr1[i];
  for (long long i = 1; i <= total; i++) cin >> arr2[i];
  bfs(1);
  cout << ans.size() << endl;
  for (long long i = 0; i < ans.size(); i++) cout << ans[i] << endl;
}
