#include<bits/stdc++.h>
#define int long long
using namespace std;
const int _=1e5+5,mod=1e9+7;
int n,m,ans;
int z[_],siz[_],p[_];
bool b[_];
struct da{
	int t,p;
};
vector<da>s[_];
void init(){
	p[0]=1;
	for(int i=1;i<_;i++)
		p[i]=p[i-1]*i%mod;
}
void dfs1(int x,int fa){
	for(auto i:s[x]){
		if(i.t!=fa)
			dfs1(i.t,x);
	}
}
void dfs(int x,int fa){
	for(auto i:s[x]){
		if(i.t!=fa){
			if(b[i.p])
				siz[x]++;
			dfs(i.t,x),siz[x]+=siz[i.t];		
		}
	}
	for(auto i:s[x]){
		if(i.t==fa)
			z[x]+=((siz[x]==m)?0ll:1ll);
		else
			z[x]+=((siz[i.t]||b[i.p])?1ll:0ll);
	}
}
signed main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(false),cin.tie(0);
	init();
	int T;
	cin>>T>>T;
	while(T--){
		memset(b,0,sizeof(b));
		memset(z,0,sizeof(z));
		memset(siz,0,sizeof(siz));
		cin>>n>>m,ans=1;
		for(int i=1,l,r;i<n;i++){
			cin>>l>>r;
			s[l].push_back((da){r,i});
			s[r].push_back((da){l,i});
		}
		for(int i=1,x;i<=m;i++)
			cin>>x,b[x]=1;
		dfs(1,0);
		for(int i=1;i<=n;i++){
			int st=s[i].size();
			if(st>1)
				(ans*=(z[i]*p[st-1]%mod-(z[i]*(z[i]-1)/2ll)%mod*p[st-2]%mod+mod)%mod)%=mod;
		}
		printf("%lld\n",ans);
		for(int i=1;i<=n;i++)
			s[i].clear();
	}
}
