#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define int long long
typedef long long ll;
const int mod=1e9+7;
int n,k;
int head[100005],to[200005],nxt[200005],ecnt=0,val[200005];
ll ans=1;
int e[100005];
ll fac[100005];
int U[100005],V[100005],W[100005];
int du[100005];
bool vis[100005];

void add(int u,int v,int w){
	to[++ecnt]=v;
	nxt[ecnt]=head[u];
	head[u]=ecnt;
	val[ecnt]=w;
}

void init(){
	fac[0]=1;
	for(int i=1;i<=100000;i++){
		fac[i]=fac[i-1]*i%mod;
	}
}

void dfs(int u,int fa){
	int sum=0;
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i];
		if(v==fa)continue;
		sum++;
		dfs(v,u);
	}
	ans=ans*fac[sum]%mod;
}

void slv1(){
	int u=U[e[1]],v=V[e[1]];
	dfs(u,v);
	dfs(v,u);
	printf("%lld\n",ans);
}

int s[100005];
int res=1;

void dfs2(int u,int fa){
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i],w=val[i];
		if(v==fa)continue;
		dfs2(v,u);
		if(w==1||s[v]>=1){
			s[u]++;
		}
	}
}

void dfs3(int u,int fa){
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i],w=val[i];
		if(v==fa)continue;
		if(w==1){
			s[v]++;
		}else{
			int tt=s[u];
			if(s[v]>=1)tt--;
			if(tt>=1){
				s[v]++;
			}
		}
		dfs3(v,u);
	}
}

void dfs4(int u,int fa){
	int sum=0;
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i];
		if(v==fa)continue;
		sum++;
		dfs4(v,u);
	}
	if(s[u]!=2){
		res=res*fac[sum]%mod; 
	}
}

signed main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int c,T;scanf("%lld%lld",&c,&T);
	init();
	while(T--){
		scanf("%lld%lld",&n,&k);
		ecnt=0;
		for(int i=1;i<=n;i++)head[i]=0,vis[i]=0,s[i]=0,du[i]=0;
		for(int i=1;i<n;i++){
			int u,v;scanf("%lld%lld",&u,&v);
			U[i]=u,V[i]=v;
			du[u]++;du[v]++;
		}
		for(int i=1;i<=k;i++)scanf("%lld",&e[i]),vis[e[i]]=1;
		for(int i=1;i<=n-1;i++){
			if(vis[i]){
				add(U[i],V[i],1);
				add(V[i],U[i],1);
			}else{
				add(U[i],V[i],0);
				add(V[i],U[i],0);
			}
		}
		ans=1;
		if(k==1){
			slv1();
		}else if(c==18){
			puts("1");
		}else if(c==19||c==20||c==21){
			if(n==2){
				puts("1");
				continue;
			}
			ans=k*fac[n-2]%mod-(k*(k-1)/2ll)%mod*fac[n-3]%mod;
			ans=(ans%mod+mod)%mod;
			printf("%lld\n",ans);
		}else if(k==2){
			dfs2(1,0);
			dfs3(1,0);
			dfs(U[e[1]],V[e[1]]);
			dfs(V[e[1]],U[e[1]]);
			res=1;
			dfs4(U[e[2]],V[e[2]]);
			dfs4(V[e[2]],U[e[2]]);
			ans+=res;
			ans=(ans%mod+mod)%mod; 
			printf("%lld\n",ans);
		}
	}
	return 0;
} 
