#include <bits/stdc++.h>
using namespace std;
bool jest_polaczenie[100 + 1][100 + 1];
int liczba_wierzcholkow, max_dystans;
long long int wyniki[100 + 1][20 * 20 + 1 + 2];
long long int modulo = 1000000007;
void wczytaj() {
  cin >> liczba_wierzcholkow >> max_dystans;
  for (int i = 0; i < liczba_wierzcholkow - 1; ++i) {
    int a, b;
    cin >> a >> b;
    jest_polaczenie[a][b] = true;
    jest_polaczenie[b][a] = true;
  }
}
void wypisz() {
  for (int i = 1; i <= liczba_wierzcholkow; ++i) {
    cout << i << ": ";
    for (int j = 0; j <= 2 * max_dystans + 1; ++j) {
      cout << wyniki[i][j] << " ";
    }
    cout << endl;
  }
}
long long int ujemna(long long int a) { return (a < 0) ? a + modulo : a; }
int temp[100 + 1];
void oblicz_wyn(int w, int pop) {
  int liczba_synow = 0;
  for (int i = 1; i <= liczba_wierzcholkow; ++i) {
    if (jest_polaczenie[w][i] && i != pop) liczba_synow++;
  }
  if (liczba_synow == 0) {
    wyniki[w][0] = 1;
    wyniki[w][max_dystans + 1] = 1;
    return;
  }
  bool pierwszy_raz = true;
  for (int i = 1; i <= liczba_wierzcholkow; ++i) {
    if (jest_polaczenie[w][i] && i != pop) {
      oblicz_wyn(i, w);
      if (pierwszy_raz) {
        pierwszy_raz = false;
        for (int j = 0; j < 2 * max_dystans + 1; ++j) {
          wyniki[w][j + 1] = wyniki[i][j];
        }
      } else {
        for (int j = 0; j <= 2 * max_dystans + 1; ++j) {
          temp[j] = wyniki[w][j];
          wyniki[w][j] = 0;
        }
        for (int j = 0; j <= 2 * max_dystans; ++j) {
          for (int k = 1; k <= 2 * max_dystans + 1; ++k) {
            if (j + k <= 2 * max_dystans) {
              wyniki[w][min(k, j + 1)] =
                  (temp[k] * wyniki[i][j] + wyniki[w][min(k, j + 1)]) % modulo;
            } else {
              wyniki[w][max(k, j + 1)] =
                  (temp[k] * wyniki[i][j] + wyniki[w][max(k, j + 1)]) % modulo;
            }
          }
        }
      }
    }
  }
  for (int i = 1; i <= 2 * max_dystans + 1; ++i) {
    wyniki[w][0] = (wyniki[w][0] + wyniki[w][i]) % modulo;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  wczytaj();
  oblicz_wyn(1, 0);
  long long int wyn = wyniki[1][0];
  for (int i = 1; i <= max_dystans; ++i) {
    wyn = (wyn + wyniki[1][i]) % modulo;
  }
  cout << wyn << endl;
  return 0;
}
