#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=1e9+7,inv2=5e8+4;
const int N=1e5+1;
int CASE,n,k,a[N],vis[N];
struct node{int u,v;}e[N];
int head[N],nxt[N<<1],to[N<<1],cnt;
vector<int> v[N];
ll hs;
map<ll,int> ma;
void add(int u,int v)
{
    to[++cnt]=v;
    nxt[cnt]=head[u];
    head[u]=cnt;
}
void dfs(int u,ll hs,int num)
{
    if(!num) ma[hs]++;
    int fac=1;
    for(int i=0;i<v[u].size();i++) fac*=i+1;
    vis[u]=1;
    for(int i=1;i<=fac;i++){
        for(auto j:v[u]){
            if(!vis[j]){
                dfs(j,hs*n+j,num-1);
            }
        }
        next_permutation(v[u].begin(),v[u].end());
    }
    vis[u]=0;
}
void solve()
{
    cin>>n>>k;
    int fl1=0,fl2=0;
    for(int i=1,u,v;i<n;i++){
        cin>>u>>v;
        add(u,v),add(v,u);
        e[i]={u,v};
        if(u!=i||v!=i+1) fl1=1;
        if(u!=1||v!=i+1) fl2=1;
    }
    for(int i=1;i<=k;i++){
        cin>>a[i];
    }
    if(CASE<=3){
        for(int i=1;i<n;i++){
            for(int j=1;j<n;j++){
                if(i==j) continue;
                if(e[i].u==e[j].u||e[i].u==e[j].v||e[i].v==e[j].u||e[i].v==e[j].v){
                    v[i].push_back(j);
                }
            }
        }
        dfs(a[1],a[1],n-2);
        cout<<ma.size()<<'\n';
    }
    else if(!fl1){
        cout<<1<<"\n";
    }
    else if(!fl2){
        ll f1=1,f2=1;
        for(int i=1;i<n;i++) f1=f1*i%mod;
        for(int i=1;i<=n-3;i++) f2=f2*i%mod;
        cout<<(f1*inv2%mod-1ll*k*(k-1)/2%mod*f2%mod+mod)%mod<<"\n";
    }
    else{
        cout<<"0\n";
    }
}
int main()
{
    freopen("traverse.in","r",stdin);
    freopen("traverse.out","w",stdout);
    int T;
    cin.tie(0)->sync_with_stdio(0);
    cin>>CASE>>T;
    while(T--) solve();
    return 0;
}