#include <bits/stdc++.h> 
using namespace std;
const int N=1e5+10;
const long long MOD=1e9+7;
long long F[N];
int cnt=0;
int from[N];
struct Edge{
	int to,nxt;
}e[N];
void Addedge(int x,int y)
{
	cnt++;
	e[cnt].to=y;
	e[cnt].nxt=from[x];
	from[x]=cnt;
}
long long qpow(long long x,long long y)
{
	if(x==0)
		return 0;
	if(y==0)
		return 1;
	if(y%2)
		return qpow(x*x%MOD,y/2)*x%MOD;
	else
		return qpow(x*x%MOD,y/2);
}
long long Frac[N],Inv[N];
void Create(int n)
{
	Frac[1]=1;
	for(int i=2;i<=n;i++)
		Frac[i]=Frac[i-1]*i%MOD;
	Inv[n]=qpow(Inv[n],MOD-2);
	for(int i=n;i>=1;i--)
		Inv[i-1]=Inv[i]*i%MOD;
}
long long C(long long x,long long y)
{
	if(x==0)
		return 0;
	if(y==0)	
		return 1;
	return Frac[x]*Inv[y]%MOD*Inv[x-y]%MOD;
}
void dfs(int u,int w)
{
	F[u]=1ll;
	long long tot=0;
	for(int i=from[u];i;i=e[i].nxt)
	{
		tot++;
		int v=e[i].to;
		if(v==w)
			continue;
		dfs(v,u);
		F[u]*=F[v];
		F[u]%=MOD;
	}
	F[u]*=Frac[tot];
}
int main()
{
	int c,T;
	scanf("%d%d",&c,&T);
	while(T--)
	{
		int n,k;
		scanf("%d%d",&n,&k);
		for(int i=1;i<n;i++)
		{
			int y,x;
			scanf("%d%d",&x,&y);
			Addedge(x,y);
			Addedge(y,x);
		}
		int key;
		for(int i=1;i<=k;i++)
			scanf("%d",&key);
		Create(n);
		long long ans=1ll;
		dfs(e[key*2].to,0);
		ans*=F[e[key*2].to];
		for(int i=1;i<=n;i++)
			F[i]=0;
		dfs(e[key*2-1].to,0);
		ans*=F[e[key*2-1].to];
		ans%=MOD;
		printf("%lld\n",ans);
	}
	return 0;
}
