#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rop(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
#define por(i,a,b) for(int i=a;i>b;i--)
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
typedef double lf;
typedef long double ld;
using namespace std;
int n,k,u,v,dp[1005][6][5005],g[5][5005],siz[1005],res;
vector<int>e[1005];
void dfs(int u,int fa){
rep(i,1,k)
dp[u][i][0]=1;
siz[u]=1;
for(auto to:e[u]){
if(to==fa)
continue;
dfs(to,u);
memset(g,0,sizeof(g));
rep(d1,0,k)
rep(x1,0,siz[u]*k)
if(dp[u][d1][x1])
rep(d2,0,k)
rep(x2,0,siz[to]*k)
if(dp[to][d2][x2])
g[max(x1+d1+x2,x1+x2+d2)-(x1+x2+d2)][x1+x2+d2]=(g[max(x1+d1+x2,x1+x2+d2)-(x1+x2+d2)][x1+x2+d2],(dp[u][d1][x1]*dp[to][d2][x2])%1000000007)%1000000007;
memcpy(dp[u],g,sizeof(g));
siz[u]+=siz[to];
}
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>k;
rop(i,1,n){
cin>>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(1,0);
rep(i,1,k*n){
res=0;
rep(j,0,k)
(res+=dp[1][j][i-j])%=1000000007;
cout<<res<<endl;
}
return 0;
}
record