#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
using namespace std;
const int maxn = 1e5;
const int maxk = 5;
const int maxlog = 16;
const int MOD = 1e9 + 7;
int n, k;
vector<int> adj[maxn + 10], a;
ll dp[maxn + 10][maxlog + 5][2], f[maxn + 10][maxlog + 10][maxk + 10], ans = 0;
void dfs(int top, int p = -1)
{
for (int next_top : adj[top])
if (next_top != p)
dfs(next_top, top);
a.clear();
for (int next_top : adj[top])
{
if (next_top == p)
continue;
a.push_back(next_top);
for (int mx = 0; mx <= maxlog; mx++)
for (int cnt = 0; cnt <= k; cnt++)
f[a.size()][mx][cnt] = 0;
}
// if (a.size() == 0 && top != 1)
// dp[top][0][0] = dp[top][1][1] = 1;
f[0][0][0] = 1;
for (int i = 0; i < a.size(); i++)
for (int mx = 0; mx <= maxlog; mx++)
for (int cnt = 0; cnt <= k; cnt++)
for (int new_mx = 0; new_mx <= maxlog; new_mx++)
{
(f[i + 1][max(mx, new_mx + 1)][cnt] += f[i][mx][cnt] * dp[a[i]][new_mx][0] % MOD) %= MOD;
(f[i + 1][max(mx, new_mx)][cnt + 1] += f[i][mx][cnt] * dp[a[i]][new_mx][1] % MOD) %= MOD;
}
for (int mx = 0; mx <= maxlog; mx++)
{
for (int i = 0; i <= k; i++)
(dp[top][mx][0] += f[a.size()][mx][i]) %= MOD;
for (int i = 0; i < k; i++)
(dp[top][mx][1] += f[a.size()][mx][i]) %= MOD;
}
// cout << top, el;
// for (int i = 0; i <= 5; i++)
// cout << dp[top][i][0] << ' ' << dp[top][i][1], el;
// for (int i = 0; i <= 5; i++)
// cout << f[a.size()][i][0] << ' ' << f[a.size()][i][1] << ' ' << dp[top][i][0] << ' ' << dp[top][i][1], el;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("SPEEDUP.INP", "r"))
{
freopen("SPEEDUP.INP", "r", stdin);
freopen("SPEEDUP.OUT", "w", stdout);
}
cin >> n >> k;
for (int i = 1; i < n; i++)
{
int x, y;
cin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(1);
for (int i = 0; i <= __lg(n); i++)
(ans += dp[1][i][0]) %= MOD;
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtYXhuID0gMWU1Owpjb25zdCBpbnQgbWF4ayA9IDU7CmNvbnN0IGludCBtYXhsb2cgPSAxNjsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CgppbnQgbiwgazsKdmVjdG9yPGludD4gYWRqW21heG4gKyAxMF0sIGE7CmxsIGRwW21heG4gKyAxMF1bbWF4bG9nICsgNV1bMl0sIGZbbWF4biArIDEwXVttYXhsb2cgKyAxMF1bbWF4ayArIDEwXSwgYW5zID0gMDsKCnZvaWQgZGZzKGludCB0b3AsIGludCBwID0gLTEpCnsKICAgIGZvciAoaW50IG5leHRfdG9wIDogYWRqW3RvcF0pCiAgICAgICAgaWYgKG5leHRfdG9wICE9IHApCiAgICAgICAgICAgIGRmcyhuZXh0X3RvcCwgdG9wKTsKICAgIGEuY2xlYXIoKTsKICAgIGZvciAoaW50IG5leHRfdG9wIDogYWRqW3RvcF0pCiAgICB7CiAgICAgICAgaWYgKG5leHRfdG9wID09IHApCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGEucHVzaF9iYWNrKG5leHRfdG9wKTsKICAgICAgICBmb3IgKGludCBteCA9IDA7IG14IDw9IG1heGxvZzsgbXgrKykKICAgICAgICAgICAgZm9yIChpbnQgY250ID0gMDsgY250IDw9IGs7IGNudCsrKQogICAgICAgICAgICAgICAgZlthLnNpemUoKV1bbXhdW2NudF0gPSAwOwogICAgfQoKLy8gICAgaWYgKGEuc2l6ZSgpID09IDAgJiYgdG9wICE9IDEpCi8vICAgICAgICBkcFt0b3BdWzBdWzBdID0gZHBbdG9wXVsxXVsxXSA9IDE7CgogICAgZlswXVswXVswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGEuc2l6ZSgpOyBpKyspCiAgICAgICAgZm9yIChpbnQgbXggPSAwOyBteCA8PSBtYXhsb2c7IG14KyspCiAgICAgICAgICAgIGZvciAoaW50IGNudCA9IDA7IGNudCA8PSBrOyBjbnQrKykKICAgICAgICAgICAgICAgIGZvciAoaW50IG5ld19teCA9IDA7IG5ld19teCA8PSBtYXhsb2c7IG5ld19teCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIChmW2kgKyAxXVttYXgobXgsIG5ld19teCArIDEpXVtjbnRdICs9IGZbaV1bbXhdW2NudF0gKiBkcFthW2ldXVtuZXdfbXhdWzBdICUgTU9EKSAlPSBNT0Q7CiAgICAgICAgICAgICAgICAgICAgKGZbaSArIDFdW21heChteCwgbmV3X214KV1bY250ICsgMV0gKz0gZltpXVtteF1bY250XSAqIGRwW2FbaV1dW25ld19teF1bMV0gJSBNT0QpICU9IE1PRDsKICAgICAgICAgICAgICAgIH0KICAgIGZvciAoaW50IG14ID0gMDsgbXggPD0gbWF4bG9nOyBteCsrKQogICAgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGs7IGkrKykKICAgICAgICAgICAgKGRwW3RvcF1bbXhdWzBdICs9IGZbYS5zaXplKCldW214XVtpXSkgJT0gTU9EOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgaSsrKQogICAgICAgICAgICAoZHBbdG9wXVtteF1bMV0gKz0gZlthLnNpemUoKV1bbXhdW2ldKSAlPSBNT0Q7CiAgICB9Ci8vICAgIGNvdXQgPDwgdG9wLCBlbDsKLy8gICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNTsgaSsrKQovLyAgICAgICAgY291dCA8PCBkcFt0b3BdW2ldWzBdIDw8ICcgJyA8PCBkcFt0b3BdW2ldWzFdLCBlbDsKLy8gICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNTsgaSsrKQovLyAgICAgICAgY291dCA8PCBmW2Euc2l6ZSgpXVtpXVswXSA8PCAnICcgPDwgZlthLnNpemUoKV1baV1bMV0gPDwgJyAnIDw8IGRwW3RvcF1baV1bMF0gPDwgJyAnIDw8IGRwW3RvcF1baV1bMV0sIGVsOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJTUEVFRFVQLklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiU1BFRURVUC5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJTUEVFRFVQLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbiA+PiBrOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBhZGpbeF0ucHVzaF9iYWNrKHkpOwogICAgICAgIGFkalt5XS5wdXNoX2JhY2soeCk7CiAgICB9CiAgICBkZnMoMSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8PSBfX2xnKG4pOyBpKyspCiAgICAgICAgKGFucyArPSBkcFsxXVtpXVswXSkgJT0gTU9EOwogICAgY291dCA8PCBhbnM7Cn0=