func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1e9 + 7;   const int inf = 0x7f7f7f7f;   const int maxn = 1e3 + 5;   int n, u, v, root, cnt[2], S;   vector<int> vec[maxn];   int sz[maxn], msz[maxn];   void dfs1(int x, int par) {     for (int i = 0; i <= (int)vec[x].size() - 1; i++) {       if (vec[x][i] == par) continue;       dfs1(vec[x][i], x);       sz[x] += sz[vec[x][i]];       msz[x] = max(msz[x], sz[vec[x][i]]);     }     sz[x]++;     msz[x] = max(msz[x], n - sz[x]);   }   int par[maxn];   int find(int x) {     if (x == par[x]) return x;     return par[x] = find(par[x]);   }   void dfs2(int x, int par, int f, int used) {     for (int i = 0; i <= (int)vec[x].size() - 1; i++) {       if (par == vec[x][i]) continue;       int now = ++cnt[f] - used;       dfs2(vec[x][i], x, f, now + used);       if (f) now *= (S + 1);       printf( %d %d %d n , x, vec[x][i], now);     }   }   int main() {     cin >> n;     if (n == 1) return 0;     for (int i = 1; i <= n - 1; i++) {       scanf( %d%d , &u, &v);       vec[u].push_back(v);       vec[v].push_back(u);     }     dfs1(1, -1);     root = 1;     for (int i = 1; i <= n; i++) {       if (msz[i] < msz[root]) root = i;     }     memset(sz, 0, sizeof(sz));     dfs1(root, -1);     priority_queue<pair<int, int>, vector<pair<int, int> >,                    greater<pair<int, int> > >         que;     for (int i = 0; i <= (int)vec[root].size() - 1; i++) {       que.push(pair<int, int>(sz[vec[root][i]], vec[root][i]));     }     for (int i = 1; i <= n; i++) par[i] = i;     while (que.size() >= 3) {       pair<int, int> p1 = que.top();       que.pop();       pair<int, int> p2 = que.top();       que.pop();       par[p2.second] = find(p1.second);       que.push(pair<int, int>(p1.first + p2.first, par[p1.second]));     }     for (int i = 1; i <= n; i++) find(i);     int pp = par[vec[root][0]];     for (int i = 0; i <= (int)vec[root].size() - 1; i++) {       if (par[vec[root][i]] == pp) S += sz[vec[root][i]];     }     for (int i = 0; i <= (int)vec[root].size() - 1; i++) {       if (par[vec[root][i]] == pp) {         printf( %d %d %d n , root, vec[root][i], ++cnt[0]);         dfs2(vec[root][i], root, 0, cnt[0]);       } else {         printf( %d %d %d n , root, vec[root][i], ++cnt[1] * (S + 1));         dfs2(vec[root][i], root, 1, cnt[1]);       }     }   }   