#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(){ int N,K; scanf("%d%d",&N,&K); vector edge[N]; for( int i = 0 ; i q; vector order; parent[0]=0; q.push(0); while( !q.empty() ){ int cur=q.front(); //cout << cur<=0; i-- ){ if( edge[order[i]].size()==1&&edge[order[i]][0]==parent[order[i]] ){ dp[order[i]][0]=1; dp[order[i]][1]=1; } else{ long long tmp[2][N+1]; memset(tmp,0,sizeof(tmp)); tmp[0][0]=1; int cur=0; for( int j = 0 ; j < (int) edge[order[i]].size();j++){ if(edge[order[i]][j]==parent[order[i]]) continue; memset(tmp[1-cur],0,sizeof(tmp[1-cur])); //cout << order[i]<<"->"<0; k++){ //cout <0;l++){ tmp[1-cur][l+k]+=tmp[cur][l]*dp[edge[order[i]][j]][k]; tmp[1-cur][l+k]%=mod; } } cur=1-cur; } int j; for( j=0; j<=N&&tmp[cur][j]>0; j++){ dp[order[i]][j]=tmp[cur][j]; //printf("%d,%d:%d ",order[i],j,(int)dp[order[i]][j]); } dp[order[i]][j]=1; //printf("\n"); } } cout << dp[0][K]<