#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define endl '\n'
mt19937 rnd(537462565);
const int mod=1000000007,N=100000;
int fct[N+9],ifct[N+9];
int cas,caso,n,k,ep[N+9],deg[N+9],tot,ans,sz[N+9],dp[N+9],sum[N+9];
bool pr[N+9];
array<int,2> ed[N+9];
struct Edge{int nxt,u,v,id;}e[N+9<<1];
int hd[N+9],tote;
void adde(int u,int v,int id){
e[++tote]={hd[u],u,v,id};
hd[u]=tote;
}
int qpow(int a,int b,int res=1){
while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}
return res;
}
void init(){
fct[0]=1;
for(int i=1;i<=N;i++)fct[i]=fct[i-1]*i%mod;
ifct[N]=qpow(fct[N],mod-2);
for(int i=N;i;i--)ifct[i-1]=ifct[i]*i%mod;
}
void dfs1(int u,int f){
for(int i=hd[u];i;i=e[i].nxt){
int v=e[i].v;
if(v==f)continue;
dfs1(v,u);
sz[u]+=sz[v]+pr[e[i].id];
}
}
void dfs2(int u,int f,int cur){
int cnt=1;
for(int i=hd[u];i;i=e[i].nxt){
int v=e[i].v;
if(v==f||!sz[v]&&!pr[e[i].id])continue;
int icur=cur*ifct[deg[u]-1]%mod*fct[deg[u]-2]%mod*cnt%mod;
if(cnt>1)icur=tot*ifct[deg[u]-1]%mod*fct[deg[u]-2]%mod*cnt%mod;
if(pr[e[i].id]){
(ans+=tot+mod-icur)%=mod;
dfs2(v,u,tot);
}else dfs2(v,u,icur);
cnt++;
}
}
void dfs3(int u,int f,int cur){
(cur*=ifct[deg[u]-1]%mod*fct[deg[u]-2]%mod)%=mod;
for(int i=hd[u];i;i=e[i].nxt){
int v=e[i].v;
if(v==f)continue;
if(pr[e[i].id]){
(ans+=mod-cur)%=mod;
continue;
}
dfs3(v,u,cur);
}
}
void dfs4(int u,int f){
sum[u]=0;
for(int i=hd[u];i;i=e[i].nxt){
int v=e[i].v;
if(v==f)continue;
dfs4(v,u);
int y=sum[v]*ifct[deg[u]-1]%mod*fct[deg[u]-2]%mod;
if(pr[e[i].id]){
(ans+=mod-sum[v]*tot%mod)%=mod;
(ans+=mod-sum[u]*tot%mod)%=mod;
y=ifct[deg[u]-1]%mod*fct[deg[u]-2]%mod;
}else (ans+=mod-sum[v]*sum[u]%mod*tot%mod)%=mod;
(sum[u]+=y)%=mod;
}
}
signed main(){
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>caso>>cas;init();
while(cas--){
cin>>n>>k;
for(int i=1;i<=n;i++)hd[i]=deg[i]=sz[i]=pr[i]=0;
tot=1;ans=0;tote=0;
for(int i=1;i<n;i++){
cin>>ed[i][0]>>ed[i][1];
adde(ed[i][0],ed[i][1],i);
adde(ed[i][1],ed[i][0],i);
deg[ed[i][0]]++;deg[ed[i][1]]++;
}
for(int i=1;i<=n;i++)(tot*=fct[deg[i]-1])%=mod;
for(int i=1;i<=k;i++)cin>>ep[i],pr[ep[i]]=1;
if(k<=0){
ans=tot;
int sk=ep[1];
dfs1(ed[sk][0],ed[sk][1]);
dfs1(ed[sk][1],ed[sk][0]);
dfs2(ed[sk][0],ed[sk][1],tot);
dfs2(ed[sk][1],ed[sk][0],tot);
cout<<ans<<endl;
}else if(n<=0){
ans=2*k*tot%mod;
for(int i=1;i<=k;i++){
dfs3(ed[ep[i]][0],ed[ep[i]][1],tot);
dfs3(ed[ep[i]][1],ed[ep[i]][0],tot);
}
cout<<ans*((mod+1)/2)%mod<<endl;
}else{
ans=k*tot%mod;
dfs4(1,0);
cout<<ans<<endl;
}
}
return 0;
}