#include<bits/stdc++.h>
using namespace std;
struct datay
{
	int x,y;
}b[100005];
const long long mod=1e9+7;
int n,m,d[100005];
long long f[100005],qwe,f1[100005],s;
bool v[100005];
vector<int> a[100005];
long long poww(long long x,long long y)
{
	long long h=1;
	while(y)
	{
		if(y&1)h=(h*x)%mod;
		x=(x*x)%mod,y>>=1;
	}
	return h;
}
void dfs(int x,int y)
{
	f[x]=1;
	for(int i=0;i<a[x].size();i++)
	{
		if(a[x][i]==y)continue;
		dfs(a[x][i],x);
		if(b[d[2]].x==x&&b[d[2]].y==a[x][i]||b[d[2]].x==a[x][i]&&b[d[2]].y==x)s=a[x].size()-1;
		f[x]=(f[a[x][i]]*f[x])%mod;
	}
	qwe=(a[x].size()-1);
	f[x]=(f[x]*f1[qwe])%mod;
	return;
}
void poi()
{
	int x,y;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)a[i].clear();
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&x,&y),b[i].x=x,b[i].y=y;
		a[x].push_back(y),a[y].push_back(x);
	}
	for(int i=1;i<=m;i++)scanf("%d",&d[i]);
	if(m==2)
	{
		dfs(b[d[1]].x,b[d[1]].y),dfs(b[d[1]].y,b[d[1]].x);
		long long ans,ans1;
		ans1=(f[b[d[1]].x]*f[b[d[1]].y])%mod;
		if(s==1)ans=f[b[d[1]].x]*f[b[d[1]].y]%mod;
		else ans=(f[b[d[1]].x]*f[b[d[1]].y]%mod)*(poww(f1[s],mod-2)%mod)%mod;
		dfs(b[d[2]].x,b[d[2]].y),dfs(b[d[2]].y,b[d[2]].x);
		printf("%lld\n",(ans1+(f[b[d[2]].x]*f[b[d[2]].y]%mod)-ans+mod)%mod);
		return;
	}
	dfs(b[d[1]].x,b[d[1]].y),dfs(b[d[1]].y,b[d[1]].x);
	printf("%lld\n",(f[b[d[1]].x]*f[b[d[1]].y]%mod));
//	int p=(1<<m);
//	for(int i=1;i<p;i++)
//	{
//		for(int j=1;j<=n;j++)
//	}
	return;
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int qew,ewq;
	cin>>qew>>ewq,f1[0]=1;
	for(int i=1;i<=100000;i++)f1[i]=f1[i-1]*i%mod;
	for(int i=1;i<=ewq;i++)poi();






  return 0;
}

