#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define pii pair<int,int>
const int N=5e5+10;
const int mod=1e9+7;

int n,ans,t,c,q;
int f[N];
int st[N],ed[N],edge[N];
int head[N],to[N<<1],nxt[N<<1],idx;
vector<int>mp[N];
vector<pii>now,od;
map<vector<pii>,bool>bz;
bitset<N>vis;
inline int read(){
	int res=0;bool s=0;char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')s=1;
	for(;isdigit(c);c=getchar())res=(res<<3)+(res<<1)+(c^48);
	return s?-res:res;
}
inline int q_pow(int a,int n){
//	cerr<<"q_pow"<<a<<" "<<n<<endl;
	int res=1;
	while(n){
		if(n&1)res=res*a%mod;
		a=a*a%mod;
		n>>=1;
	}
	return res;
}
void dfs(int u,int fa,int deep){
//	cerr<<u<<" "<<fa<<" "<<deep<<endl;
	if(deep==n-1){
		od=now;
		sort(now.begin(),now.end());
//		cerr<<"now:\n";
		for(auto ggg:now){
//			cerr<<ggg.first<<" "<<ggg.second<<endl;
		}
//		cerr<<"------\n";
		if(!bz[now])bz[now]=1,ans++;
		now=od;
		return ;
	}
	vis[u]=1;
	for(int i=head[u];~i;i=nxt[i]){
		int v=to[i];
		if(vis[v])continue;
		now[deep]={min(u,v),max(u,v)};
		dfs(v,u,deep+1);
	}
	vis[u]=0;
}
inline void add(int u,int v){
//	cerr<<"add:"<<u<<" "<<v<<endl;
	to[idx]=v;
	nxt[idx]=head[u];
	head[u]=idx++;
}
signed main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	c=read();t=read();
	f[0]=1;
	for(int i=1;i<=1e5+10;i++)f[i]=f[i-1]*i%mod;
	while(t--){
		n=read();q=read();
		ans=0;
		for(int i=1;i<n;i++)head[i]=-1;
		for(int i=1;i<n;i++){
			st[i]=read();ed[i]=read();
			mp[st[i]].push_back(i);
			mp[ed[i]].push_back(i);
		}
		for(int i=1;i<=q;i++)edge[i]=read();
		if(19<=c&&c<=21){	
			int cnt=0;
			ans=1;
			for(int i=1;i<n;i++){
				ans=ans*((n-1)*(n-2)/2-cnt+mod)%mod;
			}
			ans=ans*q_pow(f[n-1],mod-2);
		}
		else if(c==18){
			ans=1;
		}
		else{
			for(int i=1;i<=n;i++)now.push_back({0,0});
			for(int i=1;i<n;i++){
				for(auto v:mp[st[i]]){
					if(v!=i)add(i,v);
				}
				for(auto v:mp[ed[i]]){
					if(v!=i)add(i,v);
				}
			}
			for(int i=1;i<=q;i++){
//				cerr<<"edge:i:"<<i<<endl;
				dfs(edge[i],0,1);
			}
		}
		printf("%lld\n",ans%mod);
	}
	return 0;
}
