#include <bits/stdc++.h>
using namespace std;
struct S {
  vector<int> child;
  int par;
} s[100001];
vector<int> con[100001];
int vis[100001];
int ini[100001], fin[100001], n;
vector<int> ans;
void dfs1(int x, int odd, int even, int level) {
  int s = con[x].size();
  vis[x] = 1;
  if (level % 2 == 0) {
    if (even % 2 == 1) ini[x] = !ini[x];
  } else {
    if (odd % 2 == 1) ini[x] = !ini[x];
  }
  if (ini[x] != fin[x]) {
    ans.push_back(x);
    ini[x] = !ini[x];
    if (level & 1)
      odd++;
    else
      even++;
  }
  for (int i = 0; i < s; i++) {
    if (vis[con[x][i]] == 0) dfs1(con[x][i], odd, even, level + 1);
  }
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    con[a].push_back(b);
    con[b].push_back(a);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &ini[i]);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &fin[i]);
  }
  dfs1(1, 0, 0, 1);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) {
    printf("%d\n", ans[i]);
  }
  return 0;
}
