#include <bits/stdc++.h>
using namespace std;
int MAX(long long int a, long long int b) {
  if (a > b) {
    return a;
  } else {
    return b;
  }
}
int MIN(long long int a, long long int b) {
  if (a < b) {
    return a;
  } else {
    return b;
  }
}
int gcd(long long int a, long long int b) {
  long long int c;
  while (a != 0) {
    c = a;
    a = b % a;
    b = c;
  }
  return b;
}
vector<int> g[110000], ans;
int x[110000], y[110000];
void dfs(int t, int t2, int f1, int f2) {
  int i;
  if (f1 == 1) {
    x[t] = x[t] ^ 1;
  }
  if (x[t] != y[t]) {
    if (f1 == 0) {
      f1 = 1;
    } else {
      f1 = 0;
    }
    ans.push_back(t);
  }
  for (i = 0; i < g[t].size(); i++) {
    if (g[t][i] != t2) {
      dfs(g[t][i], t, f2, f1);
    }
  }
  return;
}
int main() {
  int n;
  scanf("%d", &n);
  int i;
  for (i = 1; i < n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    g[b].push_back(a);
    g[a].push_back(b);
  }
  for (i = 1; i <= n; i++) {
    scanf("%d", &x[i]);
  }
  for (i = 1; i <= n; i++) {
    scanf("%d", &y[i]);
  }
  dfs(1, 1, 0, 0);
  cout << ans.size() << endl;
  for (i = 0; i < ans.size(); i++) {
    printf("%d\n", ans[i]);
  }
}
