func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<vector<int> > g;   vector<char> used;   vector<long long> distArr, fArr, sArr;   long long A, B, diameter;   long long answer = 0;   struct step {     int a, b, d;     friend ostream& operator<<(ostream& s, const step& v);   };   ostream& operator<<(ostream& s, const step& v) {     s << v.a <<     << v.b <<     << v.d;     return s;   }   vector<step> arr;   void dfs(int v, long long dist, vector<long long>& dArr, long long& cur) {     dArr[v] = dist;     if (dArr[cur] < dist) cur = v;     for (int i = 0; i < (int)g[v].size(); i++) {       int to = g[v][i];       if (!used[to]) {         used[to] = true;         dfs(to, dist + 1, dArr, cur);       }     }   }   void dfs2(int v, long long dist, bool flag) {     if (!flag) {       sArr[v] = dist;     }     for (int i = 0; i < (int)g[v].size(); i++) {       int to = g[v][i];       if (!used[to]) {         used[to] = true;         dfs2(to, dist + 1, flag);       }     }     if (fArr[v] + sArr[v] > diameter) {       step temp;       if (fArr[v] > sArr[v]) {         temp.a = A + 1;         answer += fArr[v];       } else {         temp.a = B + 1;         answer += sArr[v];       }       temp.b = v + 1;       temp.d = v + 1;       arr.push_back(temp);     }     if (fArr[v] + sArr[v] == diameter && flag && v != A) {       step temp;       temp.a = A + 1;       temp.d = v + 1;       temp.b = v + 1;       answer += fArr[v];       arr.push_back(temp);     } else if (fArr[v] + sArr[v] == diameter)       used[v] = false;   }   int main() {     int n;     cin >> n;     g.assign(n, vector<int>());     for (int i = 0; i < n - 1; i++) {       int from, to;       cin >> from >> to;       g[from - 1].push_back(to - 1);       g[to - 1].push_back(from - 1);     }     used.assign(n, false);     used[0] = true;     distArr.assign(n, 0);     A = 0;     B = 0;     dfs(0, 0, distArr, A);     used.assign(n, false);     used[A] = true;     fArr.assign(n, 0);     sArr.assign(n, 0);     dfs(A, 0, fArr, B);     diameter = fArr[B];     used.assign(n, false);     used[B] = true;     dfs2(B, 0, false);     dfs2(A, 0, true);     cout << answer << endl;     for (int i = 0; i < (int)arr.size(); i++) cout << arr[i] << endl;     return 0;   }   