#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+1,mod=1e9+7;
int c,T,n,k,u[N],v[N];
int head[N],tot,sum[N],son[N],f[N];
struct edge{
	int to,nxt,id;
}e[N*2];
void add(int u,int v){
	e[++tot].to=v,e[tot].nxt=head[u],head[u]=tot;
}
int fpow(int x,int k){
	if(x==0) return 0;
	if(k==0) return 1;
	int tmp=fpow(x,k/2),res=1;
	if(k%2) res=x;
	return res*tmp%mod*tmp%mod;
}
int inv(int x){
	return fpow(x,mod-2);
}
void dfs(int u,int fa){
	sum[u]=1,son[u]=0;
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;
		if(v==fa) continue;
		dfs(v,u);
		sum[u]=sum[u]*sum[v]%mod*(++son[u])%mod;
	}
}
void dfs2(int u,int fa){
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;
		if(v==fa) continue;
		dfs2(v,u);
		f[v]=(++son[v])*f[u]%mod*inv(son[u])%mod;
	}
}
signed main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	scanf("%lld%lld",&c,&T);
	while(T--){
		scanf("%lld%lld",&n,&k);
		for(int i=1;i<n;i++)
			scanf("%lld%lld",&u[i],&v[i]);
		for(int i=1;i<=k;i++)
			scanf("%lld",&v[1]);
		if(c==18){
			printf("1\n");
			continue;
		}
		if(c>=19&&c<=21){
			int ans=k,ans2=k*(k-1)%mod;
			for(int i=1;i<n-1;i++)
				ans=ans*i%mod;
			for(int i=1;i<n-2;i++)
				ans2=ans2*i%mod;
			printf("%lld\n",(ans-ans2*inv(2)%mod+mod)%mod);
		}
	}
	return 0;
}
