#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000000 + 7;
map<int, vector<int>> mp;
vector<int> cur(1, -1), goal(1, -1), done(1, -1);
vector<int> ans;
int c;
void funct(int node, int level, int even, int odd) {
  int r = level % 2;
  done[node] = 1;
  if (r == 1 && odd == 1)
    cur[node] = 1 - cur[node];
  else if (r == 0 && even == 1)
    cur[node] = 1 - cur[node];
  if (cur[node] != goal[node]) {
    c++;
    ans.push_back(node);
    cur[node] = goal[node];
    if (level % 2 == 0)
      even = 1 - even;
    else
      odd = 1 - odd;
  }
  for (int i = 0; i < mp[node].size(); i++) {
    if (done[mp[node][i]] == 0) funct(mp[node][i], level + 1, even, odd);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    mp[a].push_back(b);
    mp[b].push_back(a);
  }
  int num;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &num);
    cur.push_back(num);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &num);
    goal.push_back(num);
    done.push_back(0);
  }
  c = 0;
  int level = 0, even = 0, odd = 0;
  funct(1, level, even, odd);
  cout << c << endl;
  if (c > 0) {
    int i = 0;
    while (i < ans.size()) {
      printf("%d\n", ans[i]);
      i++;
    }
  }
  return 0;
}
