#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define eb emplace_back
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<pii> vp;
int read() {
int x=0,w=1; char c=getchar();
while(!isdigit(c)) {if(c=='-') w=-1; c=getchar();}
while(isdigit(c)) {x=x*10+(c-'0'); c=getchar();}
return x*w;
}
const int N=1e5+5,mod=1e9+7;
int ccc,T,n,k,deg[N],fac[N],rt[N],prod,eu[N],ev[N],f[N][2][3];
vp e[N];
void dfs(int u,int fid) {
for(auto [v,id]:e[u]) if(id!=fid) dfs(v,id);
rep(x,0,1) rep(y,0,2) f[u][x][y]=0;
static int g[3];
g[0]=g[1]=g[2]=0; g[0]=1;
for(auto [v,id]:e[u]) if(id!=fid) {
g[1]=(g[1]*f[v][1][0]+g[0]*(f[v][0][1]+f[v][0][2]))%mod;
g[0]=g[0]*f[v][1][0]%mod;
} f[u][0][1]=g[1];
g[0]=g[1]=g[2]=0; g[0]=1;
for(auto [v,id]:e[u]) if(id!=fid) {
g[2]=(g[2]*f[v][1][0]+g[1]*(f[v][1][1]))%mod;
g[1]=(g[1]*f[v][1][0]+g[0]*(f[v][1][1]))%mod;
g[0]=g[0]*f[v][1][0]%mod;
} f[u][1][0]=g[0], f[u][1][1]=g[1], f[u][0][2]=g[2];
rep(x,0,1) rep(y,0,2) if(deg[u]-x-y>=0)
f[u][x][y]=f[u][x][y]*fac[deg[u]-x-y]%mod;
if(rt[fid]) {
int gg=f[u][1][0]+f[u][1][1];
gg=(2*mod-gg)%mod;
f[u][1][1]=(f[u][1][1]+gg)%mod;
f[u][0][1]=(f[u][0][1]+gg)%mod;
}
}
void work() {
n=read(), k=read();
rep(i,1,n) e[i].clear();
rep(i,1,n) deg[i]=0;
fac[0]=1; rep(i,1,n) fac[i]=fac[i-1]*i%mod;
rep(i,1,n-1) {
int u=read(), v=read();
deg[u]++, deg[v]++;
e[u].eb(v,i), e[v].eb(u,i);
eu[i]=u, ev[i]=v;
}
rep(i,1,n-1) rt[i]=0;
rep(i,1,k) {
int x=read();
rt[x]=1;
}
dfs(1,0);
int ans=(f[1][0][1]+f[1][0][2])%mod;
ans=(mod-ans)%mod;
printf("%lld\n",ans);
}
signed main() {
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
ccc=read(), T=read();
while(T--) work();
return 0;
}