#include <bits/stdc++.h>
using namespace std;
struct node {
  int data;
  node* next;
};
node* adjl[100001];
int col[100001];
int req[100001];
int cnt = 0;
int m = 0;
int arr[100001];
void dfs(int x, int level, int odd, int even) {
  int present;
  if (level % 2 == 0) {
    if (even % 2 == 0)
      present = col[x];
    else
      present = 1 - col[x];
  } else {
    if (odd % 2 == 0)
      present = col[x];
    else
      present = 1 - col[x];
  }
  if (present != req[x]) {
    if (level % 2 == 0) {
      even++;
    } else {
      odd++;
    }
    cnt++;
    arr[m++] = x;
  }
  node* temp = adjl[x]->next;
  while (temp != NULL) {
    dfs(temp->data, level + 1, odd, even);
    temp = temp->next;
  }
}
int main() {
  int n, i, j, k, root;
  int parent[100001];
  cin >> n;
  for (i = 0; i <= n; i++) {
    adjl[i] = (node*)malloc(sizeof(node));
    adjl[i]->next = NULL;
    parent[i] = 0;
  }
  parent[1] = 1;
  for (i = 1; i < n; i++) {
    cin >> k >> j;
    if (parent[k] == 0) {
      node* temp = (node*)malloc(sizeof(node));
      temp->data = k;
      temp->next = adjl[j]->next;
      adjl[j]->next = temp;
      parent[k] = j;
    } else {
      node* temp = (node*)malloc(sizeof(node));
      temp->data = j;
      temp->next = adjl[k]->next;
      adjl[k]->next = temp;
      parent[j] = k;
    }
  }
  for (i = 1; i <= n; i++) {
    cin >> col[i];
  }
  for (i = 1; i <= n; i++) {
    cin >> req[i];
  }
  dfs(1, 0, 0, 0);
  cout << cnt << "\n";
  for (i = 0; i < cnt; i++) {
    cout << arr[i] << "\n";
  }
  return (0);
}
