#include<bits/stdc++.h>
#define mod 1000000007
#define inv 500000004
#define N 100001
using namespace std;
int c,t;
long long n,q;
int u[N];
int v[N];
struct edge{
    int v,w;
};
vector<edge>g[N];
set<int>res;
bool vis[N];
int cnt;
int hsh;
void dfs(int u){
    vis[u]=true;
    cnt++;
    if(cnt==n){
        res.insert(hsh);
    }else{
        for(edge vw:g[u]){
            int v,w;
            v=vw.v;
            w=vw.w;
            if(vis[v])continue;
            hsh^=(1<<w);
            dfs(v);
            hsh^=(1<<w);
        }
    }
    cnt--;
    vis[u]=false;
}
inline long long fac(int x){
    long long res=1;
    for(int i=1;i<=x;i++){
        res*=i;
        res%=mod;
    }
    return res;
}
int main(){
    freopen("traverse.in","r",stdin);
    freopen("traverse.out","w",stdout);
    scanf("%d%d",&c,&t);
    while(t--){
        int m=0;
        scanf("%lld%lld",&n,&q);
        for(int i=1;i<n;i++){
            scanf("%d%d",u+i,v+i);
            g[i].clear();
        }
        if(n<=500)for(int i=1;i<n;i++){
            for(int j=i+1;j<n;j++){
                if(u[i]==u[j]||u[i]==v[j]||v[i]==u[j]||v[i]==v[j]){
                    g[i].push_back({j,++m});
                    g[j].push_back({i,m});
                }
            }
        }
        n--;
        res.clear();
        long long tmp=q;
        while(q--){
            int x;
            scanf("%d",&x);
            if(c==18){
                continue;
            }
            if(19<=c&&c<=21){
                continue;
            }
            dfs(x);
        }
        if(c==18)printf("1\n");
        else if(19<=c&&c<=21)printf("%d\n",fac(n-2)*(n*tmp-(tmp+1)*tmp/2)%mod);
        else printf("%d\n",res.size());
    }
}
