#include using namespace std; const long long MOD = 1000000007; int main() { int n, k; cin >> n >> k; vector> g(n); for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; g[a].push_back(b); g[b].push_back(a); } auto merge = [&](const vector &a, const vector &b) { vector ret(a.size() + b.size() - 1); for (int i = 0; i < a.size(); i++) { for (int j = 0; j < b.size(); j++) { (ret[i + j] += a[i] * b[j]) %= MOD; } } return ret; }; auto dfs = [&](auto &&dfs, int now, int pre) -> vector { vector dp(2); dp[0] = 1; for (int nex : g[now]) { if (nex != pre) { dp = merge(dp, dfs(dfs, nex, now)); } } dp.back() = 1; return dp; }; auto dp = dfs(dfs, 0, 0); cout << dp[k] % MOD << endl; }