#include using namespace std; using ll = long long; int main(){ int n, k; cin >> n >> k; vector> g(n); vector> dp(n + 1); for(int i = 1, u, v; i < n; i++){ cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } function dfs = [&](int v, int p){ dp[v].resize(1, 1); for(auto &&u:g[v]){ if(u == p)continue; dfs(u, v); vector ndp(dp[v].size() + dp[u].size() - 1); for(int j = 0; j < dp[v].size(); j++){ for(int k = 0; k < dp[u].size(); k++){ (ndp[j + k] += dp[v][j] * dp[u][k]) %= 1000000007; } } swap(dp[v], ndp); } dp[v].push_back(1); }; dfs(0, -1); cout << dp[0][k] << endl; }