#include <bits/stdc++.h>
using namespace std;
int n, a, b, goal[100000], stanj[100000], bio[100000];
vector<int> g[100000], solution;
int kor;
void dfs(int x, int promp, int promn, int dub) {
  int f = 0;
  if (bio[x]) return;
  bio[x] = 1;
  if (promp % 2 == 1 && dub % 2 == 0) {
    if (stanj[x] == 1) {
      stanj[x] = 0;
    } else {
      if (stanj[x] == 0) {
        stanj[x] = 1;
      }
    }
    f = 1;
  }
  if (promn % 2 == 1 && dub % 2 == 1) {
    if (stanj[x] == 1) {
      stanj[x] = 0;
    } else {
      if (stanj[x] == 0) {
        stanj[x] = 1;
      }
    }
    f = 1;
  }
  if (stanj[x] != goal[x]) {
    if (stanj[x] == 1) {
      stanj[x] = 0;
    } else {
      if (stanj[x] == 0) {
        stanj[x] = 1;
      }
    }
    if (dub % 2 == 0) {
      promp++;
    } else {
      promn++;
    }
    solution.push_back(x);
    kor++;
    f = 1;
  }
  dub++;
  for (int i = 0; i < g[x].size(); i++) dfs(g[x][i], promp, promn, dub);
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b;
    a--;
    b--;
    g[b].push_back(a);
    g[a].push_back(b);
  }
  for (int i = 0; i < n; i++) cin >> stanj[i];
  for (int i = 0; i < n; i++) cin >> goal[i];
  dfs(0, 0, 0, 0);
  cout << kor << endl;
  for (int i = 0; i < solution.size(); i++) {
    cout << solution[i] + 1 << endl;
  }
  return 0;
}
