func_code_string: #include <bits/stdc++.h>   using namespace std;   mt19937 rng(time(0));   uniform_int_distribution<int> uid(-1e9, 1e9);   vector<int> g[100002];   int d[100002], u[100002], k;   long long res, w[505], v[505];   int find(int x, int px, int sz) {     for (auto& i : g[x])       if (i != px && !u[i] && d[i] > sz / 2) return find(i, x, sz);     return x;   }   int dfs(int x, int px) {     d[x] = 1;     for (auto& i : g[x])       if (i != px && !u[i]) d[x] += dfs(i, x);     return d[x];   }   void dfs1(int x, int px, int dx) {     if (dx <= k) ++w[dx];     for (auto& i : g[x])       if (i != px && !u[i]) dfs1(i, x, dx + 1);   }   void solve(int x) {     int y = find(x, x, dfs(x, x));     u[y] = 1;     fill(v, v + k + 1, 0);     for (auto& i : g[y]) {       if (!u[i]) {         fill(w, w + k + 1, 0);         dfs1(i, i, 1);         res += w[k];         for (int i = 1; i < k; ++i) res += w[i] * v[k - i];         for (int i = 0; i < k; ++i) v[i] += w[i];       }     }     for (auto& i : g[y])       if (!u[i]) solve(i);   }   signed main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int n, x, y;     cin >> n >> k;     for (int i = 0; i < n - 1; ++i) {       cin >> x >> y;       g[--x].push_back(--y);       g[y].push_back(x);     }     solve(0);     cout << res <<   n ;   }   