#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;

inline long long read(){
	register long long x=0;
	register char ch=getchar();
	while(ch<'0'||ch>'9'){
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x;
}

const long long MOD=1000000007;
long long c,T,n,k,fact[100005],p[100005];
int ce[100005][2],cid[100005];
vector<int> E[100005];

long long func(int u,int v,int fa){
	long long ret=1;
	if(u!=fa){
		long long cnt=0;
		ret*=fact[E[u].size()-1];
		ret%=MOD;
		for(int i=0;i<E[u].size();++i){
			if(E[u][i]==v) continue;
			long long t=func(u,E[u][i],u);
			ret*=t;
			ret%=MOD;
			if(t==1) ++cnt;
		}
		ret*=p[E[u].size()-cnt-1];
		ret%=MOD;
	}
	if(v!=fa){
		long long cnt=0;
		ret*=fact[E[v].size()-1];
		ret%=MOD;
		for(int i=0;i<E[v].size();++i){
			if(E[v][i]==u) continue;
			long long t=func(v,E[v][i],v);
			ret*=t;
			ret%=MOD;
			if(t==1) ++cnt;
		}
		ret*=p[E[v].size()-cnt-1];
		ret%=MOD;
	}
	return ret;
}

int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	c=read(),T=read();
	fact[0]=1;
	p[0]=1;
	for(int i=1;i<=100002;++i){
		fact[i]=(fact[i-1]*i)%MOD;
	}
	for(int i=1;i<=100002;++i){
		p[i]=(fact[i-1]*2)%MOD;
	}
	if(c==18){
		while(T--){
			n=read(),k=read();
			for(int i=1,u,v;i<n;++i){
				u=read(),v=read();
				E[u].push_back(v);
				E[v].push_back(u);
				ce[i][0]=u;
				ce[i][1]=v;
			}
			for(int i=1;i<=k;++i){
				cid[i]=read();
			}
			printf("1\n");
			for(int i=1;i<=n;++i){
				E[i].clear();
			}
		}
		return 0;
	}else if(c>=19&&c<=21){
		while(T--){
			n=read(),k=read();
			for(int i=1,u,v;i<n;++i){
				u=read(),v=read();
				E[u].push_back(v);
				E[v].push_back(u);
				ce[i][0]=u;
				ce[i][1]=v;
			}
			for(int i=1;i<=k;++i){
				cid[i]=read();
			}
			printf("%lld\n",(((k*fact[n-2])%MOD)-((((k*(k-1)/2)*fact[n-3]))%MOD)+MOD)%MOD);
			for(int i=1;i<=n;++i){
				E[i].clear();
			}
		}
		return 0;
	}
	while(T--){
		n=read(),k=read();
		for(int i=1,u,v;i<n;++i){
			u=read(),v=read();
			E[u].push_back(v);
			E[v].push_back(u);
			ce[i][0]=u;
			ce[i][1]=v;
		}
		for(int i=1;i<=k;++i){
			cid[i]=read();
		}
		printf("%lld\n",func(ce[cid[1]][0],ce[cid[1]][1],-1));
		for(int i=1;i<=n;++i){
			E[i].clear();
		}
	}
	return 0;
}
