#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5,mod=1e9+7;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
int T,n,k,u[N],v[N],vis[N],jie[N],inv[N],vit[N],type,p[N],ans,val;
vector<pair<int,int>>e[N];
namespace S{
inline int dfs(int x,int fa){
int now=jie[e[x].size()-1];
for(auto [t,y] : e[x])if(y^fa)now=1ll*dfs(y,x)*now%mod;
return now;
}
inline int dfs2(int x,int fa,int g){
if(vit[x]){
return g*1ll*inv[e[x].size()-1]%mod*vit[x]%mod;
}
int w = 0,now=inv[e[x].size()-1];
for(auto [t,y]:e[x])if(y^fa)w=(w+dfs2(y,x,g*1ll*now%mod))%mod;
return w;
}
inline void solve(){
int ans=0,c=0;
for(int i = 1;i<n;i++){
if(vis[i]){
int now=1ll*dfs(u[i],v[i])*dfs(v[i],u[i])%mod;
ans=(ans+now)%mod;
if(c){
ans=(ans-1ll*(dfs2(u[i],v[i],1) + dfs2(v[i],u[i],1))*now)%mod;
}
vit[u[i]]++;vit[v[i]]++;
c++;
}
}
printf("%d\n",(ans+mod)%mod);
}
}
inline int dfs(int x,int fa){
int now = 0;
for(auto[id,y]:e[x]){
if(y==fa)continue;
int w = dfs(y,x);
if(!vis[id])ans = (ans+(-1ll)*w*now%mod*inv[e[x].size()-1]%mod*val)%mod;
else{
ans=(ans+w*1ll*val+now*1ll*val%mod*inv[e[x].size()-1])%mod;
}
if(vis[id])now=(now-1)%mod;
else now=(now+w)%mod;
}
return now*1ll*inv[e[x].size()-1]%mod;
}
int main(){
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
type=read();T=read();
while(T--){
n=read(),k=read();
jie[0]=inv[0]=inv[1]=1;
for(int i = 1;i<=n;i++)e[i].clear(),vis[i]=vit[i]=0,jie[i]=1ll*jie[i-1]*i%mod;
for(int i = 2;i<=n;i++)inv[i]=inv[mod%i]*1ll*(mod-mod/i)%mod;
for(int i = 1;i<n;i++)u[i]=read(),v[i]=read(),e[u[i]].push_back({i,v[i]}),e[v[i]].push_back({i,u[i]});
for(int i = 1;i<=k;i++){
p[i]=read();
vis[p[i]]=1;
}
val=S::dfs(u[p[1]],v[p[1]])*1ll*S::dfs(v[p[1]],u[p[1]])%mod;
ans=k*1ll*val%mod;
dfs(1,0);
printf("%d\n",(ans+mod)%mod);
}
return 0;
}