func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 77, Mod = 1e9 + 7;   int n, d1[N], d2[N], P1, P2, Mx, deg[N], p1[N], p2[N];   long long A;   vector<pair<int, pair<int, int> > > R;   vector<int> a[N];   void dfs(int v, int prev, bool t) {     for (int u : a[v]) {       if (u == prev) {         continue;       }       if (t) {         d1[u] = d1[v] + 1;         p1[u] = v;       } else {         d2[u] = d2[v] + 1;         p2[u] = v;       }       dfs(u, v, t);     }   }   int main() {     scanf( %d , &n);     for (int i = 1; i < n; i++) {       int v, u;       scanf( %d %d , &v, &u);       deg[v]++;       deg[u]++;       a[v].push_back(u);       a[u].push_back(v);     }     dfs(1, 1, 1);     for (int i = 1; i <= n; i++) {       if (d1[i] > Mx) {         Mx = d1[i];         P1 = i;       }     }     d1[P1] = 0;     dfs(P1, P1, 1);     Mx = 0;     for (int i = 1; i <= n; i++) {       if (d1[i] > Mx) {         Mx = d1[i];         P2 = i;       }     }     dfs(P2, P2, 0);     vector<int> Leaves;     for (int i = 1; i <= n; i++) {       if (i == P1 || i == P2 || deg[i] > 1) continue;       Leaves.push_back(i);     }     while (Leaves.size()) {       int v = Leaves.back();       Leaves.pop_back();       if (d1[v] >= d2[v]) {         A += d1[v];         R.push_back(make_pair(v, make_pair(P1, v)));       } else {         A += d2[v];         R.push_back(make_pair(v, make_pair(P2, v)));       }       deg[v]--;       for (int u : a[v]) {         deg[u]--;         if (deg[u] == 1) Leaves.push_back(u);       }     }     while (p2[P1]) {       R.push_back(make_pair(P1, make_pair(P2, P1)));       A += d2[P1];       P1 = p2[P1];     }     printf( %I64d n , A);     for (auto x : R)       printf( %d %d %d n , x.first, x.second.first, x.second.second);     return 0;   }   