#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

const ll N=1e5+5,mod=1e9+7;
ll T,n,K;
ll fac[N],f[N];
ll tt,st[N],nx[N*2],to[N*2];

void add(ll u,ll v)
{
	to[++tt]=v,nx[tt]=st[u],st[u]=tt;
}

ll power(ll x,ll p)
{
	ll re=1;
	while(p)
	{
		if(p&1) re=re*x%mod;
		x=x*x%mod;
		p>>=1;
	}
	return re;
}

void dfs(ll u,ll fa)
{
//	printf("%lld %lld\n",u,fa);fflush(stdout);
	
	f[u]=1;
	ll cnt=0;
	for(ll i=st[u];i;i=nx[i])
	{
		ll v=to[i];
		if(v==fa) continue;
		dfs(v,u);
		f[u]=f[u]*f[v]%mod;
		cnt++;
	}
	f[u]=f[u]*fac[cnt]%mod;
}

int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	
	fac[0]=1;
	for(ll i=1;i<N;i++)
		fac[i]=fac[i-1]*i%mod;
	
	scanf("%*d%lld",&T);
	while(T--)
	{
		scanf("%lld%lld",&n,&K);
		tt=0;
		memset(st,0,sizeof st);
		memset(nx,0,sizeof nx);
		for(ll i=1;i<n;i++)
		{
			ll u,v;
			scanf("%lld%lld",&u,&v);
			add(u,v);
			add(v,u);
		}
		for(ll i=1;i<=K;i++) scanf("%*d");
		
		dfs(1,0);
		
		printf("%lld\n",f[1]);
	}
	return 0;
}
