#include<bits/stdc++.h>
const int N=1e5,mod=1e9+7;
int read(){
char c=getchar();int x=0;
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
int nnn=0;
int n,m,first[N+5],to[N*2+5],nxt[N*2+5],num,vis[N*2+5],d[N+5],f[N+5],ans,jc[N+5],g[N+5],inv[N+5],ivg[N+5];
void add(int x,int y){to[++num]=y,nxt[num]=first[x],first[x]=num,++d[x];}
void clean(){
for(int i=1;i<=n;++i)d[i]=0,first[i]=f[i]=ivg[i]=g[i]=0;
for(int i=1;i<=num;++i)vis[i]=0;
num=1;
ans=0;
}
int fa[N+5];
void dfs(int x,int y){
fa[x]=y;
g[x]=jc[d[x]-1],ivg[x]=inv[d[x]-1];
for(int i=first[x];i;i=nxt[i])if(to[i]!=y){
dfs(to[i],x);
g[x]=1ll*g[x]*g[to[i]]%mod;
ivg[x]=1ll*ivg[x]*ivg[to[i]]%mod;
if(vis[i])f[x]=(f[x]+1)%mod;
else f[x]=(f[x]+1ll*f[to[i]]*ivg[to[i]])%mod;
}
f[x]=1ll*f[x]*g[x]%mod;
f[x]=1ll*f[x]*(d[x]>=2?1ll*inv[d[x]-1]*jc[d[x]-2]%mod:0)%mod;
}
void dfs2(int x,int y,int s){
for(int i=first[x];i;i=nxt[i])if(to[i]!=y){
if(vis[i]){
ans=(ans+g[1])%mod;
ans=(ans-(d[x]>=2?1ll*s*inv[d[x]-1]%mod*jc[d[x]-2]%mod:0)+mod)%mod;
dfs2(to[i],x,g[1]);
s=(s+g[1])%mod;
}
else{
dfs2(to[i],x,d[x]>=2?1ll*s*inv[d[x]-1]%mod*jc[d[x]-2]%mod:0);
s=(s+1ll*f[to[i]]*g[1]%mod*ivg[to[i]]%mod)%mod;
}
}
}
void work(){
n=read(),m=read();
for(int i=1,u,v;i<n;++i)u=read(),v=read(),add(u,v),add(v,u);
for(int i=1,x;i<=m;++i)x=read(),vis[x<<1]=vis[x<<1|1]=1;
inv[1]=1;
for(int i=2;i<=n;++i)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
jc[0]=1,inv[0]=1;
for(int i=1;i<=n;++i)jc[i]=1ll*jc[i-1]*i%mod,inv[i]=1ll*inv[i-1]*inv[i]%mod;
dfs(1,0);
dfs2(1,0,0);
ans=(ans+mod)%mod;
printf("%d\n",ans);
}
int T,c;
int main(){
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
c=read(),T=read();
while(T--){
++nnn;
clean();
work();
}
return 0;
}