func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 405;   const int oo = 10005;   int N, M, T, K, Q;   vector<pair<int, int> > G[MAXN];   int dp[MAXN][MAXN][MAXN];   int par[MAXN];   int indPar[MAXN];   void DFS(int u, int p) {     par[u] = p;     for (int i = 0; i < G[u].size(); i++) {       int v = G[u][i].first;       if (v != p) {         indPar[v] = G[u][i].second;         DFS(v, u);       }     }     return;   }   int solve(int i, int cnt, int curK) {     if (curK == 0) return 0;     if (G[i].size() == 1 && i != 1) return (curK == 1) ? 0 : oo;     if (cnt >= G[i].size()) return (curK == 1) ? 0 : oo;     if (dp[i][cnt][curK] != -1) return dp[i][cnt][curK];     int res = oo;     int v = G[i][cnt].first;     if (v == par[i]) return dp[i][cnt][curK] = solve(i, cnt + 1, curK);     res = min(res, solve(i, cnt + 1, curK) + 1);     for (int k = 1; k < curK; k++)       res = min(res, solve(v, 0, k) + solve(i, cnt + 1, curK - k));     return dp[i][cnt][curK] = res;   }   void TRACE(int i, int cnt, int curK) {     if (curK == 0) return;     if (G[i].size() == 1 && i != 1) return;     if (cnt >= G[i].size()) return;     int res = solve(i, cnt, curK);     int v = G[i][cnt].first;     if (v == par[i]) {       TRACE(i, cnt + 1, curK);       return;     }     if (res == solve(i, cnt + 1, curK) + 1) {       cout << G[i][cnt].second <<    ;       TRACE(i, cnt + 1, curK);       return;     }     for (int k = 1; k < curK; k++)       if (res == solve(v, 0, k) + solve(i, cnt + 1, curK - k)) {         TRACE(v, 0, k);         TRACE(i, cnt + 1, curK - k);         return;       }     return;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     if (fopen( 440D                 .inp ,                r )) {       freopen(            440D             .inp ,            r , stdin);       freopen(            440D             .out ,            w , stdout);     }     cin >> N >> K;     int u, v;     for (int i = 1; i <= N - 1; i++) {       cin >> u >> v;       G[u].push_back({v, i});       G[v].push_back({u, i});     }     DFS(1, 0);     memset(dp, -1, sizeof(dp));     int ANS = solve(1, 0, K);     int Root = 1;     for (int i = 2; i <= N; i++) {       if (ANS > solve(i, 0, K) + 1) {         ANS = solve(i, 0, K) + 1;         Root = i;       }     }     if (Root == 1) {       cout << solve(1, 0, K) <<   n ;       TRACE(1, 0, K);       return 0;     }     cout << solve(Root, 0, K) + 1 <<   n ;     cout << indPar[Root] <<   n ;     TRACE(Root, 0, K);   }   