#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+2,p=1e9+7;
int jc[N],Tid,T,n,k,u[N],v[N],dp[N][3],rt;
bool b[N];
vector<pair<int,bool>>g[N];
int ksm(int x,int k){int s=1;for(;k;k>>=1,x=x*x%p)if(k&1)s=s*x%p;return s;}
void add(int&x,int y){x=x+y>=p?x+y-p:x+y;}
void upd(int&s,int&t,int x,int y,int b){
	x%=p,y%=p;
	t=(t*y+s*x)%p;
	s=(s*y+b*x)%p;
}
void dfs(int u,int fa){
	int v,ok,sz=g[u].size()-(bool)fa;
	int b=1,s=0,t=0,s0=0,t0=0,s2=0,t2=0;
	for(auto i:g[u])if(v=i.first,ok=i.second,v!=fa){
		dfs(v,u);
		if(ok)add(dp[v][1],dp[v][0]),dp[v][0]=0;
		upd(s,t,dp[v][0]+dp[v][1]+dp[v][2],dp[v][0]+dp[v][1],b);
		upd(s0,t0,dp[v][0],dp[v][0]+dp[v][1],b);
		upd(s2,t2,dp[v][2],dp[v][0]+dp[v][1],b);
		b=b*(dp[v][0]+dp[v][1])%p;
	}
	dp[u][0]=dp[u][1]=0;
	dp[u][2]=(t-t0-t2+p+p)*jc[sz-2]%p*(u==1?1:sz-1)%p;
	if(u!=1){
		if(!sz)dp[u][0]=1;
		int sum=1;
		for(auto i:g[u])if(v=i.first,ok=i.second,v!=fa)sum=sum*(dp[v][0]+dp[v][1])%p;
		for(auto i:g[u])if(v=i.first,ok=i.second,v!=fa){
			int tmp=sum*ksm(dp[v][0]+dp[v][1],p-2)%p*jc[sz-1]%p;
			add(dp[u][0],tmp*dp[v][0]%p);
			add(dp[u][1],tmp*dp[v][1]%p);
			add(dp[u][2],tmp*dp[v][2]%p);
		}
	}else if(g[u].size()==1)for(auto i:g[u])if(v=i.first,ok=i.second,v!=fa)add(dp[u][2],(dp[v][1]+dp[v][2])%p);
}
signed main(){
	freopen("traverse.in","r",stdin);freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	jc[0]=1;
	for(int i=1;i<N;i++)jc[i]=jc[i-1]*i%p;
	cin>>Tid>>T;
	while(T--){
		cin>>n>>k;
		for(int i=1;i<=n;i++)g[i].clear(); 
		for(int i=1;i<n;i++)cin>>u[i]>>v[i],b[i]=0;
		for(int i=1,x;i<=k;i++)cin>>x,b[x]=1;
		for(int i=1;i<n;i++)g[u[i]].push_back({v[i],b[i]}),g[v[i]].push_back({u[i],b[i]});
		dfs(1,0);
		cout<<dp[1][2]<<'\n';
	}
}
