#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,j,k) for(int i=(j);i<=(k);i++)
#define per(i,j,k) for(int i=(j);i>=(k);i--)
#define pb emplace_back
#define mp make_pair
#define fi first
#define se second
using vi=vector<int>;
using pi=pair<int,int>;
namespace IO{
char buf[1<<26], *iS=buf;
void init(){
buf[ fread(buf, 1, 1<<26, stdin) ]=0;
}
#define getchar() (*iS++)
int read(){
int res=0;
char ch=' ';
do{
ch=getchar();
}while(!isdigit(ch));
do{
res=res*10+ch-48;
ch=getchar();
}while(isdigit(ch));
return res;
}
#undef getchar
}
using IO::read;
const int mod=1e9+7, i2=(mod+1)/2;
int qpow(int x,int y=mod-2){
int res=1;
while(y){
if(y%2) res=res*x%mod;
x=x*x%mod;
y/=2;
}
return res;
}
const int N=1e5+5;
int fac[N], ifac[N];
void init(){
fac[0]=1;
rep(i,1,N-1){
fac[i]=fac[i-1]*i%mod;
}
ifac[N-1]=qpow(fac[N-1]);
per(i,N-1,1){
ifac[i-1]=ifac[i]*i%mod;
}
}
void solve(){
int n=read(), k=read();
vector<vector<pi>> G(n+1);
rep(i,1,n-1){
int u=read(), v=read();
G[u].pb(v, i);
G[v].pb(u, i);
}
vector<bool> st(n+1);
rep(i,1,k){
int id=read();
st[id]=1;
}
int ans0=1, ansx=1;
rep(i,1,n){
int c=G[i].size();
if(c>1){
(ans0*= fac[c-2] )%=mod;
}
}
rep(i,1,n){
int c=G[i].size();
if(c>1){
(ansx*= c-1 )%=mod;
}
}
(ansx*= k )%=mod;
vi f(n+1), g(n+1), h(n+1), ans(n+1);
auto dfs=[&](auto self,int u,int p)->void {
f[u]=1;
for(auto [v,id]:G[u]){
if(id!=p){
self(self, v, id);
ans[u]=(ans[u]*f[v] + ans[v]*f[u])%mod;
h[u]=(h[u]*f[v] + g[u]*g[v] + (st[id]? g[u]*f[v]: 0))%mod;
g[u]=(f[u]*g[v] + g[u]*f[v] + (st[id]? f[u]*f[v]: 0))%mod;
f[u]=f[u]*f[v]%mod;
}
}
int c=G[u].size();
if(c>1){
(f[u]*= c-1 )%=mod;
(ans[u]*= c-1 )%=mod;
}
(ans[u]+= h[u] )%=mod;
if(st[p]){
(ans[u]+= g[u] )%=mod;
g[u]=0;
}
};
dfs(dfs, 1, 0);
int Ans=(ansx-ans[1]+mod)%mod*ans0%mod;
cout<< Ans <<'\n';
}
signed main(){
assert(freopen("traverse.in","r",stdin));
assert(freopen("traverse.out","w",stdout));
ios::sync_with_stdio(0);cin.tie(0);
IO::init();
init();
int tid=read(), t=read();
while(t--){
solve();
}
}