#include <bits/stdc++.h>
#define RNG(_i,_a,_b) for(int _i=(_a),_i##_END=(_b); _i<=_i##_END; _i++)
#define IRNG(_i,_a,_b) for(int _i=(_a),_i##_END=(_b); _i>=_i##_END; _i--)
using namespace std;
const int MAXN=1e5+10; const long MOD=1e9+7;
void addto(long& x,long y){ x=(x+y)%MOD; }
int n,k; vector<int> G[MAXN]; bool mark[MAXN];
struct{ int u,v; } E[MAXN];
int fa[MAXN],deg[MAXN];
long fac[MAXN],inv[MAXN];
void dfs1(int u,int fa_){
    fa[u]=fa_;
    for(int v:G[u]){
        if(v!=fa_) dfs1(v,u);
    }
}
long F[MAXN][2],ans;
void dfs2(int u){
    F[u][0]=F[u][1]=0;
    long tmp[2] {0,0};
    auto coef=deg[u]>=2?(fac[deg[u]-2]*inv[deg[u]-1]%MOD):1;
    for(int v:G[u]){
        if(v==fa[u]) continue;
        dfs2(v);
        RNG(s,0,1){
            RNG(t,0,1) addto(ans,(s^t?1:MOD-1)*(tmp[s]*F[v][t]%MOD*coef%MOD)%MOD);
        }
        addto(tmp[0],F[v][0]),addto(tmp[1],F[v][1]);
    }
    tmp[0]=tmp[0]*coef%MOD,tmp[1]=tmp[1]*coef%MOD;
    if(fa[u]&&mark[u]){
        F[u][0]=tmp[1],F[u][1]=tmp[0];
        addto(F[u][1],1);
        addto(ans,MOD-F[u][0]),addto(ans,F[u][1]);
    }
    addto(F[u][0],tmp[0]),addto(F[u][1],tmp[1]);
}
long qpow(long x,int p){
    long ret=1;
    for(; p; p>>=1,x=x*x%MOD){
        if(p&1) ret=ret*x%MOD;
    }
    return ret;
}
void case_main(){
    cin>>n>>k;
    RNG(i,1,n) G[i].clear();
    fill_n(mark+1,n,0);
    fill_n(deg+1,n,0);
    fac[0]=1; RNG(i,1,n) fac[i]=fac[i-1]*i%MOD;
    inv[n]=qpow(fac[n],MOD-2); IRNG(i,n-1,0) inv[i]=inv[i+1]*(i+1)%MOD;
    RNG(i,1,n-1){
        int u,v; cin>>u>>v;
        G[u].push_back(v),G[v].push_back(u);
        E[i]={u,v};
        deg[u]++,deg[v]++;
    }
    dfs1(1,0);
    RNG(_,1,k){
        int i; cin>>i;
        if(E[i].u==fa[E[i].v]) mark[E[i].v]=1;
        else mark[E[i].u]=1;
    }
    long sum=1;
    RNG(i,1,n) sum=sum*fac[deg[i]-1]%MOD;
    ans=0;
    dfs2(1);
    cout<<ans*sum%MOD<<"\n";
}
int main(){
    freopen("traverse.in","r",stdin);
    freopen("traverse.out","w",stdout);
    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    int testid,cas; cin>>testid>>cas;
    RNG(_,1,cas) case_main();
}
