#include<bits/stdc++.h>
#define ll long long
#define pb emplace_back
#define N 100005
using namespace std;
const int mod=1e9+7;
ll fac[N];
int c,T;
int n,m;
int u[N],v[N];
ll res;
int a[N],L,t[N];
bool vis[N];
void dfs(int now,bool tmp=0)
{
	if(!L&&!tmp)
	{
		res++;
		return;
	}
	if(vis[now])
	{
		dfs(a[L--]);
		return;
	}
	vis[now]=1;
	bool flag=0;
	for(int i=1;i<n;i++)
	{
		if(vis[i]) continue;
		if(u[i]==u[now]||u[i]==v[now]||v[i]==u[now]||v[i]==v[now]) 
		{
			t[++L]=i;
			dfs(i);
			--L;
			flag=1;
		}
	}
	if(!flag)
		dfs(a[L--]);
	vis[now]=0;
}
void Solve()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<n;i++)
		scanf("%d%d",&u[i],&v[i]);
	for(int i=1;i<=m;i++) scanf("%d",&a[i]);
	if(c==18) 
	{
		printf("1\n");
		return;
	}
	if(c>=19&&c<=21)
	{
		--n;
		res=m*fac[n-1]*2%mod+mod-1ll*m*(m-1)%mod*fac[n-2]%mod;
		res%=mod;
		printf("%lld\n",res*((mod+1)/2)%mod);	
		return;
	}
	res=0;
	dfs(a[1],1);
	printf("%lld\n",res);
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	scanf("%d%d",&c,&T);
	fac[0]=1;for(int i=1;i<=N-5;i++) fac[i]=fac[i-1]*i%mod;
	while(T--) Solve();
	return 0;
}
