func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1000010;   int dp[maxn][2];   int n, cnt = 1, head[maxn], to[maxn], nxt[maxn], val[maxn];   inline void add(int x, int y, int z) {     nxt[++cnt] = head[x];     head[x] = cnt;     to[cnt] = y;     val[cnt] = z;   }   void dfs(int x, int fa) {     for (int i = head[x]; i; i = nxt[i]) {       if (to[i] == fa) continue;       dfs(to[i], x);       dp[x][0] += dp[to[i]][0] + val[i];     }   }   void dfs1(int x, int fa) {     for (int i = head[x]; i; i = nxt[i]) {       if (to[i] == fa) continue;       dp[to[i]][1] = dp[x][0] - dp[to[i]][0] - val[i] + dp[x][1] + val[i ^ 1];       dfs1(to[i], x);     }   }   int st[maxn], top;   int main() {     cin >> n;     for (int i = 1, x, y; i < n; ++i) {       cin >> x >> y;       add(x, y, 0);       add(y, x, 1);     }     dfs(1, 1);     dfs1(1, 1);     int tot = 1e9;     for (int i = 1; i <= n; ++i) {       tot = min(tot, dp[i][0] + dp[i][1]);     }     for (int i = 1; i <= n; ++i) {       if (dp[i][0] + dp[i][1] == tot) {         st[++top] = i;       }     }     cout << tot << endl;     for (int i = 1; i <= top; ++i) {       cout << st[i] <<    ;     }     return 0;   }   