#include<bits/stdc++.h>
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;
inline static int read(){
int sum=0,ch=getchar(),neg=0;
while(!isdigit(ch)) neg=(ch=='-'),ch=getchar();
while(isdigit(ch)) sum=sum*10+(ch^48),ch=getchar();
return neg?-sum:sum;
}
constexpr int mod=1e9+7,N=1e5; ll ans;
struct{int v,nxt;}e[200005]; int n,m,head[100005],deg[100005],ecnt;
void add(int u,int v){e[++ecnt]={v,head[u]},head[u]=ecnt,deg[v]++;}
int fac[100005],inv[100005],val[100005]; bool flag[100005];
int dp[100005][2];
void dfs(int u,int fa,bool tp){
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].v; if(v==fa) continue; dfs(v,u,flag[i/2]);
ans=(ans+((ll)(dp[u][0]+dp[u][1])*dp[v][1]+(ll)dp[u][1]*dp[v][0])%mod*val[u])%mod;
dp[u][0]=(dp[u][0]+dp[v][0])%mod,dp[u][1]=(dp[u][1]+dp[v][1])%mod;
}
if(deg[u]==1) dp[u][tp]=1;
else{
if(tp) dp[u][1]=(dp[u][0]+dp[u][1])%mod,dp[u][0]=0;
dp[u][0]=(ll)dp[u][0]*val[u]%mod,dp[u][1]=(ll)dp[u][1]*val[u]%mod;
}
}
signed main(){
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
read(),*fac=*inv=1,inv[N]=716327852;
for(int i=1;i<=N;i++) fac[i]=(ll)fac[i-1]*i%mod;
for(int i=N-1;i;i--) inv[i]=inv[i+1]*(i+1ll)%mod;
for(int T=read();T;T--){
n=read(),m=read(),memset(head+1,0,4*n),memset(deg+1,0,4*n),ecnt=1;
for(int i=1,u,v;i<n;i++) u=read(),v=read(),add(u,v),add(v,u);
memset(flag+1,0,n); for(int i=1;i<=m;i++) flag[read()]=1; ll mul=1;
if(n==2){puts("1"); continue;} memset(dp,0,8*n+8);
for(int i=1;i<=n;mul=mul*fac[deg[i++]-1]%mod)
val[i]=(ll)inv[deg[i]-1]*(deg[i]>1?fac[deg[i]-2]:0)%mod;
ans=0,dfs(max_element(deg+1,deg+n+1)-deg,0,0);
printf("%lld\n",mul*ans%mod);
} return 0;
}