#include <bits/stdc++.h>
using namespace std;
int n;
int cnt = 0;
struct node {
  int goal;
  int init;
  int visited;
};
node cvor[100001];
vector<int> veze[100001], promene;
void DFS(int curr, int even, int odd) {
  int i, trenutna;
  cvor[curr].visited = 1;
  trenutna = (cvor[curr].init + even) % 2;
  if (trenutna != cvor[curr].goal) {
    promene.push_back(curr);
    cnt++;
    even++;
    cvor[curr].init = cvor[curr].goal;
  }
  for (i = 0; i < veze[curr].size(); i++) {
    if (cvor[veze[curr][i]].visited == 0) DFS(veze[curr][i], odd, even);
  }
}
int main() {
  int i, a, b;
  cin >> n;
  for (i = 0; i < n - 1; i++) {
    cin >> a >> b;
    veze[b].push_back(a);
    veze[a].push_back(b);
  }
  for (i = 1; i <= n; i++) {
    cin >> a;
    cvor[i].init = a;
    cvor[i].visited = 0;
  }
  for (i = 1; i <= n; i++) {
    cin >> a;
    cvor[i].goal = a;
  }
  DFS(1, 0, 0);
  cout << promene.size() << '\n';
  for (i = 0; i < promene.size(); i++) {
    cout << promene[i] << '\n';
  }
}
