n,k=map(int,input().split()) edge=[[] for i in range(n)] for i in range(n-1): a,b=map(int,input().split()) edge[a].append(b) edge[b].append(a) mod=10**9+7 dp=[[0]*(n+1) for i in range(n)] for i in range(n): dp[i][0]=1 if len(edge[i])==1 and i!=0: dp[i][1]=1 d=[(0,0,0)] seen=[1]*n size=[1]*n while d: x,y,z=d.pop() if x==0: seen[y]=0 for i in edge[y]: if seen[i]: d.append((1,i,y)) d.append((0,i,y)) else: dp_new=[0]*(n+1) for k1 in range(size[z]): for k2 in range(size[y]+1): dp_new[k1+k2]+=dp[z][k1]*dp[y][k2] size[z]+=size[y] for i in range(size[z]+1): dp[z][i]=dp_new[i]%mod dp[z][size[z]]=1 print(dp[0][k])