#include <bits/stdc++.h>
#define N 100011
using namespace std;
const int p=1e9+7;
namespace IO
{
char Is[(1<<21)+10],Os[(1<<21)+10];int Ipt=1<<21,Opt;
char gc()
{
if(Ipt==(1<<21))Is[fread(Is,1,1<<21,stdin)]=0,Ipt=0;
return Is[Ipt++];
}
void flush(){fwrite(Os,1,Opt,stdout);Opt=0;}
void pc(char x)
{
Os[Opt++]=x;
if(Opt==(1<<21))flush();
}
int read()
{
int x=0;char c=gc();
while(c<'0'||c>'9')c=gc();
while(c<='9'&&c>='0')x=x*10+c-'0',c=gc();
return x;
}
void write(int x){if(x<10)pc(x+'0');else write(x/10),pc(x%10+'0');}
}
using namespace IO;
int T,n,k,rt;vector<int> G[N];
bool inK[N];
int dp[N][4],fac[N],eu[N],ev[N],fa[N];
void dfs0(int u,int F)
{
fa[u]=F;
for(int v:G[u])if(v^F)
{
dfs0(v,u);
}
}
void dfs(int u,int F)
{
for(int v:G[u])if(v^F)dfs(v,u);
if(G[u].size()==1)
{
dp[u][2|inK[u]]=1;
return;
}
if(u!=rt)
{
int tt[5]={0,0,0,0,1};
for(int v:G[u])if(v^F)
{
int ntt[5]={0,0,0,0,0};
for(int o=0;o<4;++o)
{
if(o>=2)for(int _=0;_<5;++_)ntt[_]=(ntt[_]+1ll*tt[_]*dp[v][o])%p;
ntt[o]=(ntt[o]+1ll*tt[4]*dp[v][o])%p;
}
for(int _=0;_<5;++_)tt[_]=ntt[_];
}
for(int o=0;o<4;++o)dp[u][o]=tt[o];
}
{
int tt[7]={0,0,0,0,1,0,0};
for(int v:G[u])if(v^F)
{
int ntt[7]={0,0,0,0,0,0,0};
for(int o=0;o<4;++o)
{
if(o>=2)for(int _=0;_<7;++_)ntt[_]=(ntt[_]+1ll*tt[_]*dp[v][o])%p;
ntt[o]=ntt[o]+(1ll*tt[4]*dp[v][o])%p;
for(int y=0;y<4;++y)
{
int typ=(o>=2)+(y>=2);
if(typ==2)ntt[5+(o|y)-2]=(ntt[5+(o|y)-2]+1ll*tt[y]*dp[v][o])%p;
if(typ==1)ntt[5+min(o,y)]=(ntt[5+min(o,y)]+1ll*tt[y]*dp[v][o])%p;
}
}
for(int _=0;_<7;++_)tt[_]=ntt[_];
}
dp[u][0]=(dp[u][0]+tt[5])%p;
dp[u][1]=(dp[u][1]+tt[6])%p;
}
if(inK[u])
{
dp[u][3]=(dp[u][3]+dp[u][2])%p;
dp[u][2]=0;
}
}
int main()
{
freopen("traverse.in","r",stdin);freopen("traverse.out","w",stdout);
fac[0]=1;for(int i=1;i<N;++i)fac[i]=1ll*fac[i-1]*i%p;
read();T=read();while(T--)
{
n=read();k=read();
for(int i=1;i<=n;++i)G[i].clear();
for(int i=1;i<n;++i)
{
int u,v;u=read();v=read();
eu[i]=u;ev[i]=v;
G[u].push_back(v);G[v].push_back(u);
}
if(n==2){read();pc(49);pc(10);continue;}
memset(dp,0,sizeof(dp));
memset(inK,0,sizeof(inK));
rt=0;
for(int i=1;i<=n;++i)if(G[i].size()>=2){rt=i;break;}
dfs0(rt,0);
for(int i=1;i<=k;++i)
{
int id;id=read();
if(fa[eu[id]]==ev[id])swap(eu[id],ev[id]);
inK[ev[id]]=1;
}
dfs(rt,0);
int ans=dp[rt][1];
for(int i=1;i<=n;++i)if(G[i].size()>=2)ans=1ll*ans*fac[G[i].size()-2]%p;
write((ans%p+p)%p);pc(10);
}
flush();
fclose(stdin);fclose(stdout);return 0;
}