#include using namespace std; using ll = long long; const ll MOD = 1e9 + 7; vector> G; void dfs(int idx, int par, vector& V) { V.emplace_back(1); for (auto& nxt : G[idx]) { if (nxt == par) continue; int N = V.size(); vector V_nxt, V_memo = V; dfs(nxt, idx, V_nxt); V.resize(V.size() + V_nxt.size() - 1); for (int i = 1; i < V_nxt.size(); i++) { for (int j = 0; j < N; j++) { (V[j + i] += V_memo[j] * V_nxt[i]) %= MOD; } } } V.emplace_back(1); } int main() { int N, K; cin >> N >> K; G.resize(N); for (int i = 0; i < N - 1; i++) { int a, b; cin >> a >> b; G[a].emplace_back(b); G[b].emplace_back(a); } vector V; dfs(0, -1, V); cout << V[K] << endl; }