func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1005;   struct edge {     int to, next;   } e[N * 2];   int head[N], tot, n;   int sz[N], mxv, mxrt;   void add(int x, int y) {     e[++tot] = (edge){y, head[x]};     head[x] = tot;   }   void dfs(int x, int fa, int n) {     int mx = 0;     sz[x] = 1;     for (int i = head[x]; i; i = e[i].next)       if (e[i].to != fa) {         dfs(e[i].to, x, n);         sz[x] += sz[e[i].to];         mx = max(mx, sz[e[i].to]);       }     mx = max(mx, n - sz[x]);     if (mx < mxv) mxv = mx, mxrt = x;   }   pair<int, int> q[N];   int f[N][N];   int top, be[N], mnv, mnid, dif;   void insert(int x, int y) {     q[++top] = pair<int, int>(x, y);     for (int i = (int)(0); i <= (int)(n); i++) f[top][i] = f[top - 1][i];     for (int i = (int)(y); i <= (int)(n); i++) f[top][i] |= f[top - 1][i - y];   }   int s1, s2, dep[N];   void getans(int x, int fa, int type) {     dep[x] = (type == 1 ? (s1 += 1) : (s2 += dif));     printf( %d %d %d n , x, fa, dep[x] - dep[fa]);     for (int i = head[x]; i; i = e[i].next)       if (e[i].to != fa) getans(e[i].to, x, type);   }   int main() {     scanf( %d , &n);     for (int i = (int)(1); i <= (int)(n - 1); i++) {       int x, y;       scanf( %d%d , &x, &y);       add(x, y);       add(y, x);     }     mxv = 1 << 30;     dfs(1, 0, n);     f[0][0] = 1;     for (int i = head[mxrt]; i; i = e[i].next)       insert(e[i].to, sz[e[i].to] > sz[mxrt] ? n - sz[mxrt] : sz[e[i].to]);     insert(mxrt, 1);     mnv = 1 << 30;     for (int i = (int)(0); i <= (int)(n); i++)       if (abs(n - 2 * i) < mnv && f[top][i]) mnv = n - 2 * i, mnid = i;     dif = mnid;     for (int i = (int)(top); i >= (int)(1); i--) {       if (mnid >= q[i].second && f[i - 1][mnid - q[i].second])         be[i] = 1, mnid -= q[i].second;       else         be[i] = 0;     }     for (int i = (int)(1); i <= (int)(top - 1); i++)       getans(q[i].first, mxrt, be[i]);   }   