#include<bits/stdc++.h>
#define IL inline
#define reg register
#define N 100100
#define mod 1000000007
IL int read()
{
reg int x=0,f=0; reg char ch=getchar();
while(ch<'0'||ch>'9')f|=ch=='-',ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return f?-x:x;
}
IL int Add(reg int x,reg int y){return x+y<mod?x+y:x+y-mod;}
IL int Sub(reg int x,reg int y){return x<y?x-y+mod:x-y;}
IL void Pls(reg int &x,reg int y){x=Add(x,y);}
IL void Dec(reg int &x,reg int y){x=Sub(x,y);}
IL int Mul(reg int x,reg int y){long long r=1ll*x*y; return r<mod?r:r%mod;}
int fac[N],ifac[N],inv[N];
IL void init(reg int n)
{
fac[0]=ifac[0]=inv[1]=1;
for(reg int i=2;i<=n;++i)inv[i]=Mul(mod-mod/i,inv[mod%i]);
for(reg int i=1;i<=n;++i)fac[i]=Mul(fac[i-1],i),ifac[i]=Mul(ifac[i-1],inv[i]);
}
int n,m,fa[N],dep[N],d[N];
std::vector<int>G[N];
IL void add(reg int u,reg int v){G[u].push_back(v),G[v].push_back(u);}
struct Edge{int u,v;}e[N];
bool vis[N],key[N];
void dfs0(reg int u)
{
dep[u]=dep[fa[u]]+1;
for(auto v:G[u])if(v!=fa[u])
fa[v]=u,dfs0(v);
}
int ans,con,f[N][2];
void dfs1(reg int u)
{
f[u][0]=f[u][1]=0;
if(d[u]==1)
{
f[u][key[u]]=1;
return;
}
for(auto v:G[u])if(v!=fa[u])
{
dfs1(v);
for(reg int i=0,j;i<2;++i)for(j=0;j<2;++j)
if(i||j)Pls(ans,Mul(f[u][i],f[v][j]));
for(reg int i=0;i<2;++i)Pls(f[u][i],Mul(inv[d[u]-1],f[v][i]));
}
if(key[u])Pls(f[u][1],f[u][0]),f[u][0]=0;
}
IL void work()
{
n=read(),m=read();
for(reg int i=1;i<=n;++i)G[i].clear(),vis[i]=key[i]=0;
for(reg int i=1;i<n;++i)
{
e[i]={read(),read()};
add(e[i].u,e[i].v);
}
while(m--)vis[read()]=1;
if(n==2)
{
puts("1");
return;
}
for(reg int i=1;i<=n;++i)d[i]=G[i].size();
reg int rt=1;
while(d[rt]==1)++rt;
fa[rt]=0,dfs0(rt);
for(reg int i=1;i<n;++i)if(vis[i])
{
auto [u,v]=e[i];
if(fa[u]==v)key[u]=1;
else key[v]=1;
}
con=1;
for(reg int i=1;i<=n;++i)con=Mul(con,fac[d[i]-1]);
ans=0,dfs1(rt),printf("%d\n",Mul(ans,con));
}
main()
{
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
init(1e5),read();
for(reg int t=read();t--;work());
}