#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const double PI = 3.14159265358979323846; const double EPS = 1e-12; const int INF = 1<<25; typedef pair P; typedef long long ll; typedef unsigned long long ull; #define MAX_N 2000 int N, K; vector g[MAX_N]; ll dp[MAX_N][MAX_N]; ll mod = 1000000007; ll dfs(int u){ dp[u][0] = 1; ll sz = 1; for(int i = 0; i < g[u].size(); i++){ int v = g[u][i]; ll t = dfs(v); sz += t; for(int j = sz-1; j >= 0; j--){ for(int k = 1; k <= (min(t, j)); k++){ (dp[u][j]+=dp[u][j-k]*dp[v][k])%=mod; } } } dp[u][sz] = 1; return sz; } int main(){ cin>>N>>K; for(int i = 0; i < N-1; i++){ int a, b; cin>>a>>b; g[a].push_back(b); } dfs(0); cout<