func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 0x3f3f3f3f;   int n, nn, sz[133333], p;   vector<int> g[133333], V;   void dfs_sz(int x, int par) {     sz[x] = 1;     for (int to : g[x]) {       if (to != par) {         dfs_sz(to, x);         sz[x] += sz[to];       }     }     if (sz[x] == n / 2 || sz[x] == n / 2 + 1) {       V.push_back(x);       if (~par) V.push_back(par);     }   }   int dp[133333];   int dfs(int x, int par) {     if (g[x].size() - (par != -1) == 0) {       dp[x] = 1;       return dp[x];     }     vector<int> v;     for (int to : g[x]) {       if (to != par) {         dfs(to, x);         v.push_back(dp[to]);       }     }     sort(v.begin(), v.end());     if (v.size() == 1) {       if (v[0] == 1) {         dp[x] = -2;         p = x;       } else {         dp[x] = inf;       }     } else if (v.size() == 2) {       if (v[1] < 0) {         dp[x] = inf;       } else if (v[0] < 0) {         if (v[0] + v[1] == 0)           dp[x] = v[0] - 1;         else           dp[x] = inf;       } else {         if (v[0] == v[1]) {           dp[x] = v[0] + 1;         }       }     } else if (v.size() == 3) {       if (v[0] == v[1] && v[2] == v[1] + 1) {         dp[x] = -v[2] - 1;         p = x;       } else {         dp[x] = inf;       }     }     return dp[x];   }   int main() {     cin >> nn;     n = (1 << nn) - 2;     for (int i = 1; i < n; i++) {       int x, y;       cin >> x >> y;       g[x].push_back(y);       g[y].push_back(x);     }     dfs_sz(1, -1);     set<int> ans;     for (int x : V) {       p = 0;       dfs(x, -1);       if (dp[x] == -nn && p) ans.insert(p);     }     cout << ans.size() << endl;     for (int x : ans) {       cout << x <<    ;     }     return 0;   }   