func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e5 + 10;   int n;   bool init[MAXN], goal[MAXN];   vector<int> e[MAXN];   bool mark[MAXN];   bool even = true;   bool eo[2];   queue<int> ans;   void dfs(int v) {     if (mark[v]) return;     mark[v] = true;     bool change = false;     if ((init[v] != goal[v]) ^ eo[even]) {       ans.push(v + 1);       eo[even] = !eo[even];       change = true;     }     for (int i = 0; i < e[v].size(); i++) {       int u = e[v][i];       even = !even;       dfs(u);       even = !even;     }     if (change) eo[even] = !eo[even];   }   int main() {     cin >> n;     for (int i = 0; i < n - 1; i++) {       int u, v;       cin >> u >> v;       u--;       v--;       e[u].push_back(v);       e[v].push_back(u);     }     for (int i = 0; i < n; i++) cin >> init[i];     for (int i = 0; i < n; i++) cin >> goal[i];     dfs(0);     cout << ans.size() << endl;     while (ans.size() > 0) {       cout << ans.front() << endl;       ans.pop();     }     return 0;   }   