#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define N 100010
#define int long long
#define mod 1000000007
int c,t,n,k,u[N],v[N],vis[N],fac[N],allqwq,ans;
int f[N][2];
vector<pair<int,int> > g[N];
vector<int> tmp[N];
int ksm(int a,int k)
{
	int res=1;
	while(k)
	{
		if(k&1)
		 res=res*a%mod;
		a=a*a%mod;
		k>>=1;
	}
	return res;
}
void dfs(int u,int fa)
{
	if(g[u].size()==1&&fa)
	{
		f[u][0]=1;
		return;
	}
	int ivvv=ksm(g[u].size()-1,mod-2);
	for(pair<int,int> nv:g[u])
	{
		int v=nv.first,id=nv.second;
		if(v==fa)
		 continue;
		dfs(v,u);
		if(vis[id])
		{
			f[v][1]=(f[v][1]+f[v][0])%mod;
			f[v][0]=0;
		}
		ans=(ans+(f[u][0]*f[v][1]+f[u][1]*(f[v][0]+f[v][1]))%mod*ivvv)%mod;
		f[u][0]=(f[u][0]+f[v][0])%mod;
		f[u][1]=(f[u][1]+f[v][1])%mod;
	}
	f[u][0]=f[u][0]*ivvv%mod;
	f[u][1]=f[u][1]*ivvv%mod;
}
signed main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	fac[0]=1;
	for(int i=1;i<N;i++)
	 fac[i]=fac[i-1]*i%mod;
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>c>>t;
	while(t--)
	{
		cin>>n>>k;
		for(int i=1;i<=n;i++)
		{
			f[i][0]=f[i][1]=0;
			g[i].clear();
		}
		for(int i=1;i<=n-1;i++)
		{
			vis[i]=0;
		}
		ans=0;
		for(int i=1;i<=n-1;i++)
		{
			cin>>u[i]>>v[i];
			g[u[i]].push_back(make_pair(v[i],i));
			g[v[i]].push_back(make_pair(u[i],i));
		}
		int x=0;
		for(int i=1;i<=k;i++)
		{
			cin>>x;
			vis[x]=1;
		}
		allqwq=1;
		for(int i=1;i<=n;i++)
		 allqwq=allqwq*fac[g[i].size()-1]%mod;
		bool fl=0;
		for(int i=1;i<=n;i++)
		if(g[i].size()>1)
		{
			dfs(i,0);
			fl=1;
			break;
		}
		if(!fl)
		{
			cout<<1<<"\n";
			continue;
		}
		cout<<ans*allqwq%mod<<"\n";
	}
}
