func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = (int)1e9;   const double eps = (double)1e-8;   const int mod = (int)1000000007;   const int maxn = (int)2 * 1e5 + 5;   int n, x, y, mx;   int u[maxn], pr[maxn];   pair<int, int> t[maxn];   vector<pair<int, int> > a[maxn];   vector<int> ans;   list<int> q;   list<int>::iterator it1;   void dzen(int v, int p) {     pr[v] = p;     if (a[v].size() > 1 || v == 1) {       q.push_back(v);       u[v] = 0;       if (a[v][0].first == p) u[v] = 1;     }     mx = max((int)a[v].size(), mx);     for (int i = (0); i < (a[v].size()); i++) {       if (a[v][i].first == p) continue;       dzen(a[v][i].first, v);     }     return;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     ;     cin >> n;     for (int i = (2); i <= (n); i++) {       cin >> x >> y;       a[x].push_back(make_pair(y, i - 1));       a[y].push_back(make_pair(x, i - 1));     }     mx = 0;     dzen(1, 0);     memset(t, -1, sizeof t);     cout << mx <<   n ;     while (mx--) {       ans.clear();       for (list<int>::iterator it = q.begin(); it != q.end();) {         if (t[pr[*it]].first == mx && t[pr[*it]].second == *it) {           it++;           continue;         }         t[*it] = make_pair(mx, a[*it][u[*it]].first);         ans.push_back(a[*it][u[*it]].second);         u[*it]++;         if (u[*it] < (int)a[*it].size() && a[*it][u[*it]].first == pr[*it])           u[*it]++;         if (u[*it] == (int)a[*it].size()) {           it1 = it;           it++;           q.erase(it1);         } else           it++;       }       cout << ans.size() <<    ;       for (int i = (0); i < (ans.size()); i++) {         cout << ans[i] <<    ;       }       cout <<   n ;     }     return 0;   }   