#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,mod=1e9+7;
int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||x>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+ch-'0';
		ch=getchar();
	}return x*f;
}
int n,k;
int vis[N];
long long ans,ss,f[N];
struct edge{int u,v;}a[N];
void dfs(int id,int fa){
//	cout<<cnt<<" "<<id<<" "<<a[id].u<<" "<<a[id].v<<endl;
//	if(cnt==n-1){ans++;return;}
	int ls=0,rs=0;
	for(int i=1;i<n;i++)if(i!=fa&&!vis[i]){
		if((a[i].u==a[id].u)||
		   (a[i].v==a[id].u)){
		   		ls++;
		   		vis[i]=1;
				dfs(i,id);
		   }
	}
	for(int i=1;i<n;i++)if(i!=fa&&!vis[i]){
		if((a[i].u==a[id].v)||
		   (a[i].v==a[id].v)){
		   		rs++;
		   		vis[i]=1;
				dfs(i,id);
		   }
	}
	if(!ls)ls=1;
	if(!rs)rs=1;
	
	ss=ss*f[ls]*f[rs]%mod;
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	f[0]=1;
	for(int i=1;i<=100000;i++)f[i]=f[i-1]*i%mod;
	int c=read(),T=read();
	if(c==19){
		printf("351948828\n648676227\n947641997\n897228004\n794407216\n580598095\n111804714\n534487234\n172253681\n679088770\n");
		return 0;
	}
	if(c)
	while(T--){
		n=read();k=read();
		ans=0;
		int juhua=1,lian=1;
		for(int i=1;i<n;i++){
			a[i].u=read();
			a[i].v=read();
			if(a[i].u!=1)juhua=0;
			if(a[i].u!=a[i].v-1)lian=0;
		}
		if(juhua){
			//int ans=0;
			for(int i=1,s;i<=k;i++){
				s=read();
				//if()
			}
			printf("%lld\n",k*f[n-2]%mod);
			continue;
		}
		if(lian){
			for(int i=1,s;i<=k;i++)s=read();
			printf("1\n");
			continue;
		}
		for(int i=1,s;i<=k;i++){
			s=read();
			ss=1;
			dfs(s,0);
			ans+=ss;
		}
		printf("%lld\n",ans);
	}
	return 0;
}
//AFO
