#include <bits/stdc++.h>
using namespace std;
struct data {
  int val;
  int col;
  vector<int> vec;
} arr[100005];
void connect(int a, int b) {
  arr[a].vec.push_back(b);
  arr[b].vec.push_back(a);
}
int goal[100005];
vector<int> ans;
void dfs(int n, int fl, int flip, int flip1) {
  arr[n].col = 1;
  if (fl % 2 == 0) {
    if (flip % 2 == 0) {
      if (arr[n].val != goal[n]) {
        if (arr[n].val == 0)
          arr[n].val = 1;
        else
          arr[n].val = 0;
        ans.push_back(n);
        flip++;
      } else {
      }
    } else {
      if (arr[n].val == 0)
        arr[n].val = 1;
      else
        arr[n].val = 0;
      if (arr[n].val != goal[n]) {
        if (arr[n].val == 0)
          arr[n].val = 1;
        else
          arr[n].val = 0;
        ans.push_back(n);
        flip++;
      }
    }
  } else {
    if (flip1 % 2 == 0) {
      if (arr[n].val != goal[n]) {
        if (arr[n].val == 0)
          arr[n].val = 1;
        else
          arr[n].val = 0;
        ans.push_back(n);
        flip1++;
      }
    } else {
      if (arr[n].val == 0)
        arr[n].val = 1;
      else
        arr[n].val = 0;
      if (arr[n].val != goal[n]) {
        if (arr[n].val == 0)
          arr[n].val = 1;
        else
          arr[n].val = 0;
        ans.push_back(n);
        flip1++;
      }
    }
  }
  fl++;
  for (int i = 0; i < arr[n].vec.size(); i++) {
    if (arr[arr[n].vec[i]].col == 0) dfs(arr[n].vec[i], fl, flip, flip1);
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int aa, bb;
    cin >> aa >> bb;
    connect(aa, bb);
  }
  for (int i = 1; i <= n; i++) {
    int v;
    cin >> v;
    arr[i].val = v;
    arr[i].col = 0;
  }
  for (int i = 1; i <= n; i++) {
    cin >> goal[i];
  }
  dfs(1, 0, 0, 0);
  int si = ans.size();
  cout << si << endl;
  for (int i = 0; i < si; i++) {
    cout << ans[i] << endl;
  }
}
