树形dp+01背包
#include<bits/stdc++.h>
using namespace std;
const int N=110,mod=1e9+7;
typedef long long ll;
ll f[N][N],dp[N],dep[N];
ll n,k;
vector<int> g[N];
void dfs(int u,int fa,int root)
{
dep[u]=dep[fa]+1;
f[root][dep[u]]++;
for(auto v:g[u])
{
if(v==fa)continue;
dfs(v,u,root);
}
}
void solve()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(i==j)f[i][j]=0;
else f[i][j]=mod;
g[i].clear();
dep[i]=0;
}
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
if(k==2) cout<<(n*(n-1)/2)<<'\n';
else
{
ll ans=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=n;j++)dep[i]=0;
for(int j=1;j<=n;j++)
{
for(int l=0;l<=n;l++)f[j][l]=0;
}
for(auto v:g[i])
dfs(v,i,v);
for(int d=1;d<=n;d++)
{
for(int l=1;l<=k;l++)dp[l]=0;
dp[0]=1;
for(auto j:g[i])
{
if(f[j][d])
for(int l=k;l>=1;l--)
{
dp[l]=(dp[l]+dp[l-1]*f[j][d]%mod)%mod;
}
}
ans=(ans+dp[k])%mod;
}
}
cout<<ans<<'\n';
}
}
int main()
{
int t;cin>>t;while(t--)solve();
return 0;
}