func_code_string: #include <bits/stdc++.h>   using namespace std;   struct zero {     int nxt, to;   } edge[200000 << 1];   int head[200000], tot = 0;   void add_edge(int a, int b) {     edge[++tot] = (zero){head[a], b};     head[a] = tot;   }   int n, m, plk, poi, d1, d2, dep[200000], kl[200000], d[200000], op[200000],       h[200000];   bool flag;   void aux(int x, int fa) {     if (dep[x] > plk) plk = dep[x], poi = x;     for (int i = head[x]; i; i = edge[i].nxt) {       int to = edge[i].to;       if (to == fa) continue;       dep[to] = dep[x] + 1;       kl[to] = x;       aux(to, x);     }   }   bool cmp(int a, int b) { return h[a] < h[b]; }   void solve(int x, int fa) {     vector<int> v;     for (int i = head[x]; i; i = edge[i].nxt) {       int to = edge[i].to;       if (to == fa) continue;       v.push_back(to);     }     op[x] = 0;     if (v.size() == 0)       h[x] = op[x] = 0;     else if (v.size() == 1) {       int to = v[0];       solve(to, x);       if (op[to] || h[to]) flag = 0;       op[x] = x, h[x] = h[v[0]] + 1;     } else if (v.size() == 2) {       solve(v[0], x), solve(v[1], x);       if ((op[v[0]] && op[v[1]]) || h[v[0]] != h[v[1]])         flag = 0;       else if (op[v[0]] || op[v[1]])         op[x] = op[v[0]] + op[v[1]];       h[x] = h[v[0]] + 1;     } else if (v.size() == 3) {       solve(v[0], x), solve(v[1], x), solve(v[2], x);       sort(v.begin(), v.end(), cmp);       if (op[v[0]] || op[v[1]] || op[v[2]]) flag = 0;       if (!(h[v[1]] == h[v[0]] && h[v[2]] == h[v[0]] + 1)) flag = 0;       op[x] = x, h[x] = h[v[2]] + 1;     } else       flag = 0;   }   int main() {     scanf( %d , &n);     m = (1 << n) - 2;     for (int i = 1; i < m; i++) {       int a, b;       scanf( %d%d , &a, &b);       add_edge(a, b), add_edge(b, a);       d[a]++, d[b]++;     }     poi = plk = dep[1] = 0;     aux(1, 0);     d1 = poi;     poi = plk = dep[d1] = kl[d1] = 0;     aux(d1, 0);     d2 = poi;     int poss = d2;     vector<int> syk;     while (poss) {       if (abs(2 * dep[poss] - dep[d2]) <= 1) {         flag = 1;         solve(poss, 0);         if (op[poss] && flag && h[poss] == n - 1) syk.push_back(op[poss]);       }       poss = kl[poss];     }     cout << syk.size() << endl;     sort(syk.begin(), syk.end());     for (int i = 0; i < syk.size(); i++) cout << syk[i] <<    ;   }   