func_code_string: #include <bits/stdc++.h>   using namespace std;   long long mod = 1000000007, n, m, siz[100010], s[210][210], dp[100010][210],             f[210], sum[210];   vector<long long> g[100010];   void jia(long long &x, long long y) {     x += y;     if (x >= mod) x -= mod;   }   void dfs(long long x, long long fa) {     dp[x][0] = 2;     siz[x] = 1;     for (long long i = 0, v; i < g[x].size(); i++) {       v = g[x][i];       if (v == fa) continue;       dfs(v, x);       for (long long j = 0; j <= m; j++) f[j] = 0;       for (long long j = 0; j <= min(m, siz[x]); j++)         for (long long k = 0; k <= min(m - j, siz[v]); k++)           jia(f[j + k], dp[x][j] * dp[v][k] % mod);       for (long long j = 0; j <= m; j++) dp[x][j] = f[j];       for (long long j = 0; j <= m; j++) jia(sum[j], mod - dp[v][j]);       siz[x] += siz[v];     }     for (long long j = 0; j <= m; j++) jia(sum[j], dp[x][j]);     for (long long j = m; j >= 1; j--) jia(dp[x][j], dp[x][j - 1]);     jia(dp[x][1], mod - 1);   }   int main() {     scanf( %lld%lld , &n, &m);     for (long long u, v, i = 1; i < n; i++) {       scanf( %lld%lld , &u, &v);       g[u].push_back(v);       g[v].push_back(u);     }     s[1][1] = 1;     for (long long i = 2; i <= m; i++)       for (long long j = 1; j <= i; j++)         s[i][j] = (s[i - 1][j - 1] + s[i - 1][j] * j) % mod;     dfs(1, 0);     long long ans = 0;     for (long long fac = 1, i = 1; i <= m; i++) {       fac = fac * i % mod;       jia(ans, fac * s[m][i] % mod * sum[i] % mod);     }     printf( %lld , ans);     return 0;   }   