#include #define rep(i,n)for(int i=0;i<(n);i++) #define MOD 1000000007 using namespace std; typedef long long ll; int dp[3000][3000];//頂点iの個をj個塗る通り数 vectorE[3000]; int siz[3000];//頂点iを根とする部分木のサイズ void rec(int v,int p){ dp[v][0]=1; dp[v][siz[v]]=1; for(auto u:E[v]){ if(u==p)continue; rec(u,v); for(int i=siz[v]-1;i>0;i--){ for(int j=1;j<=siz[u]&&j<=i;j++){ (dp[v][i]+=(dp[u][j]*(ll)dp[v][i-j])%MOD)%=MOD; } } } } void dfs(int v,int p){ siz[v]=1; for(int u:E[v]){ if(u==p)continue; dfs(u,v); siz[v]+=siz[u]; } } int main(){ int n,k;scanf("%d%d",&n,&k); rep(i,n-1){ int a,b;scanf("%d%d",&a,&b); E[a].push_back(b); E[b].push_back(a); } dfs(0,-1); rec(0,-1); cout<