#include <bits/stdc++.h>
using namespace std;
const long long inf = 1LL << 61;
const long long mod = 1e9 + 7;
const int max_n = 110;
int n, k;
long long old_dp[max_n];
long long dp[max_n][max_n];
vector<int> G[max_n];
void dfs(int u, int fa);
int main() {
  int i = 0, j = 0;
  int a, b;
  scanf("%d%d", &n, &k);
  for (i = 0; i < n - 1; i++) {
    scanf("%d%d", &a, &b);
    G[a].push_back(b);
    G[b].push_back(a);
  }
  if (n == 1) {
    puts("1");
    return 0;
  }
  memset(dp, 0, sizeof(dp));
  dfs(1, -1);
  long long ans = 0;
  for (i = 0; i <= k; i++) {
    ans += dp[1][i];
    ans %= mod;
  }
  cout << ans << endl;
  return 0;
}
void dfs(int u, int fa) {
  if (G[u].size() == 1 && fa != -1) {
    dp[u][0] = 1;
    dp[u][k + 1] = 1;
    return;
  }
  int i, j, s, t, v;
  bool flag = false;
  for (i = 0; i < G[u].size(); i++) {
    v = G[u][i];
    if (v == fa) continue;
    dfs(v, u);
    if (!flag) {
      flag = true;
      for (j = 0; j <= 2 * k + 1; j++) {
        dp[u][j + 1] = dp[v][j];
      }
    } else {
      for (s = 0; s < max_n; s++) {
        old_dp[s] = dp[u][s];
        dp[u][s] = 0;
      }
      for (s = 0; s <= 2 * k; s++) {
        for (t = 1; t <= 2 * k + 1; t++) {
          if (s + t <= 2 * k) {
            dp[u][min(s + 1, t)] += dp[v][s] * old_dp[t];
            dp[u][min(s + 1, t)] %= mod;
          } else {
            dp[u][max(s + 1, t)] += dp[v][s] * old_dp[t];
            dp[u][max(s + 1, t)] %= mod;
          }
        }
      }
    }
  }
  for (i = 1; i <= 2 * k + 1; i++) {
    dp[u][0] += dp[u][i];
    dp[u][0] %= mod;
  }
}
