#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e5+5,N=1e5;
const int mod=1e9+7;
int Test,n,k;
int head[MAXN],tot;
struct node{
	int nxt,to;
}e[MAXN<<1];
int u_[MAXN],v_[MAXN];
inline void clear(){
	for(int i=1;i<=n;i++)head[i]=0;
	tot=0;
}
inline void add(int u,int v){
	e[++tot]=node{head[u],v};
	head[u]=tot;
}
int fac[MAXN];
int dp[MAXN];
void dfs(int u,int fa1){
	dp[u]=1;
	int leaf=0;
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;if(v==fa1)continue;
		dfs(v,u);
		leaf++;
		dp[u]=(dp[u]*dp[v])%mod;
	}
	dp[u]=dp[u]*fac[leaf]%mod;
}
inline void solve(){
	cin>>n>>k;clear();
	for(int i=1,u,v;i<n;i++){
		cin>>u>>v;
		u_[i]=u,v_[i]=v;
		add(u,v),add(v,u);
	}
	if(k==1){
		int pl;cin>>pl;
		int u=u_[pl],v=v_[pl];
		dfs(u,v);
		int ans=dp[u];
		dfs(v,u);
		ans=ans*dp[v]%mod;
		cout<<ans<<"\n";
		return ;
	}
	if(Test==18){
		cout<<"1\n";
		return ;
	}
	if(19<=Test&&Test<=21){
		int ans=fac[n-1]*k%mod-(k*(k-1))%mod*fac[n-2]%mod+mod;
		ans%=mod;
		cout<<ans<<"\n";
		int pl;while(k--)cin>>pl;
		return ;
	}
}
#define Fopen(file) freopen(file".in","r",stdin),freopen(file".out","w",stdout)
signed main(){
	Fopen("traverse");
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);
	fac[0]=1;for(int i=1;i<=N;i++)fac[i]=fac[i-1]*i%mod;
	int T;cin>>Test>>T;
	while(T--)solve();
}

/*
351948828
648676227
947641997
897228004
794407216
580598095
111804714
534487234
172253681
679088770



*/
