func_code_string: #include <bits/stdc++.h>   inline int getint() {     register char ch;     while (!isdigit(ch = getchar()))       ;     register int x = ch ^  0 ;     while (isdigit(ch = getchar())) x = (((x << 2) + x) << 1) + (ch ^  0 );     return x;   }   const int N = 101, K = 41, mod = 1e9 + 7;   int k, f[N][K], tmp[K];   std::forward_list<int> e[N];   inline void add_edge(const int &u, const int &v) {     e[u].push_front(v);     e[v].push_front(u);   }   void dfs(const int &x, const int &par) {     f[x][0] = f[x][k + 1] = 1;     for (int &y : e[x]) {       if (y == par) continue;       dfs(y, x);       std::fill(&tmp[0], &tmp[k * 2] + 1, 0);       for (register int i = 0; i <= k * 2; i++) {         for (register int j = 0; j <= k * 2; j++) {           (tmp[i + j <= k * 2 ? std::min(i, j + 1) : std::max(i, j + 1)] +=            (long long)f[x][i] * f[y][j] % mod) %= mod;         }       }       std::copy(&tmp[0], &tmp[k * 2] + 1, f[x]);     }   }   int main() {     const int n = getint();     k = getint();     for (register int i = 1; i < n; i++) {       add_edge(getint(), getint());     }     dfs(1, 0);     int ans = 0;     for (register int i = 0; i <= k; i++) {       (ans += f[1][i]) %= mod;     }     printf( %d n , ans);     return 0;   }   