#include<bits/stdc++.h>
using namespace std;
const int N=100005;
const int mod=1e9+7;
const int inv2=5e8+4;
int opt,_;
int n,m,K;
vector<int> g[N];
struct Edge{
	int u,v;
}e[N];
int w[N],st[N];
bool flgA,flgB;
vector<int> g2[N]; 
bool ok[N];
Edge ee[N];
int en;
unordered_map<int,bool> mp;
int ans;
void dfs(int u){
	for(auto v:g2[u]){
		if(ok[v]) continue;
		ok[v]=true;
		ee[++en]={min(u,v),max(u,v)};
		if(en==m-1) {
			int ret=0;
			for(int j=1;j<=en;j++) 
				(ret+=1ll*w[ee[j].u]*w[ee[j].v]%mod)%=mod;
			if(!mp[ret]) mp[ret]=true,++ans;
		}
		dfs(v);
		ok[v]=false;
		--en;
	}
}
void work0(){
	mp.clear();
	for(int i=1;i<=n;i++) g2[i].clear();
	for(int i=1;i<m;i++)
		for(int j=i+1;j<=m;j++)
			if(e[i].u==e[j].u||e[i].u==e[j].v||e[i].v==e[j].u||e[i].v==e[j].v) g2[i].push_back(j),g2[j].push_back(i);
	for(int i=1;i<=m;i++) w[i]=1ll*rand()*rand()%mod;
	for(int i=1;i<=m;i++) ok[i]=false;
	en=0;
	ok[st[1]]=true; dfs(st[1]);
	printf("%d",ans);
}
void workB(){
	int fac=1;
	for(int i=1;i<=n-2;i++) fac=1ll*fac*i%mod;
	int ans=1ll*fac*K%mod;
	ans=1ll*ans*inv2%mod;
	printf("%d\n",ans);
}
void Solve(){
	scanf("%d%d",&n,&K); m=n-1;
	for(int i=1;i<=n;i++) g[i].clear();
	for(int i=1;i<=m;i++){
		scanf("%d%d",&e[i].u,&e[i].v);
		g[e[i].u].push_back(e[i].v);
		g[e[i].v].push_back(e[i].u);
	}
	for(int i=1;i<=K;i++) scanf("%d",&st[i]);
	if(n<=5&&K<=1) return work0(),void();
	if(opt==18) return puts("1"),void();
	if(19<=opt&&opt<=21) return workB(),void();
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	srand(time(0));
	scanf("%d%d",&opt,&_);
	while(_--) Solve();
	return 0;
}
/*
1 1 
4 1 
1 2 
2 3 
2 4 
1
*/

/*
7 1 
5 2 
1 2 
1 3 
2 4 
2 5 
1 3
*/
