#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,P=1e9+7;
char buf[1<<23],*p1=buf,*p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<23,stdin),p1==p2)?EOF:*p1++)
template<class rd>
void read(rd &x){
char c=getchar();
for(;c<48||c>57;c=getchar());
for(x=0;c>47&&c<58;c=getchar())x=(x<<1)+(x<<3)+(c^48);
}
int T,tid,n,q,d[N],fac[N],inv[N],a[N],ans,all,f[N];
bool key[N],vis[N];
vector<pair<int,int> >e[N];
inline void Add(int &x,int y){
if((x+=y)>=P)x-=P;
}
void dfs(int x,int y){
f[x]=0,vis[x]=true;
int w=0;
if(d[x]>1)w=1ll*inv[d[x]-1]*fac[d[x]-2]%P;
for(auto [z,i]:e[x])if(z!=y){
if(key[i]){
Add(ans,1ll*f[x]*(P-w)%P);
Add(f[x],1);
}else{
dfs(z,x);
Add(ans,1ll*f[x]*f[z]%P*(P-w)%P);
Add(f[x],f[z]);
}
}
f[x]=1ll*f[x]*w%P;
}
void solve(){
read(n),read(q);
for(int i=1;i<=n;++i)e[i].clear(),d[i]=key[i]=vis[i]=0;
for(int i=1,x,y;i<n;++i){
read(x),read(y);
e[x].emplace_back(y,i);
e[y].emplace_back(x,i);
++d[x],++d[y];
}
for(int i=1;i<=q;++i)read(a[i]),key[a[i]]=true;
ans=q,all=1;
for(int i=1;i<=n;++i)all=1ll*all*fac[d[i]-1]%P;
for(int i=1;i<=n;++i)if(!vis[i])dfs(i,0);
ans=1ll*ans*all%P;
printf("%d\n",ans);
}
int main(){
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
read(tid),read(T);
fac[0]=fac[1]=inv[0]=inv[1]=1;
for(int i=2;i<N;++i)fac[i]=1ll*fac[i-1]*i%P,inv[i]=1ll*(P-P/i)*inv[P%i]%P;
for(int i=2;i<N;++i)inv[i]=1ll*inv[i-1]*inv[i]%P;
while(T--)solve();
return 0;
}