#include<cstdio>
using namespace std;
const int N=1e6+10,mod=1e9+7;
int c,T,n,m,a[N],u[N],v[N],ans;
int e[N*2],last[N],nxt[N*2],em;
int fc[N];
void init()
{
    fc[0]=1;
    for(int i=1;i<N;i++) fc[i]=1ll*fc[i-1]*i%mod;
}
void in(int x,int y)
{
    e[++em]=y;
    nxt[em]=last[x];
    last[x]=em;
}
int dfs(int x,int fa)
{
    int s=1,s1=0;
    for(int k=last[x];k;k=nxt[k])
    {
        if(e[k]!=fa) s1++,s=1ll*s*dfs(e[k],x)%mod;
    }
    s=1ll*s*fc[s1]%mod;
    return s;
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	init();
    scanf("%d%d",&c,&T);
    while(T--)
    {
        for(int i=1;i<=em;i++) nxt[i]=e[i]=0;
        for(int i=1;i<=n;i++) last[i]=0;
        em=0;
        scanf("%d%d",&n,&m);
        for(int i=1;i<n;i++)
        {
            scanf("%d%d",&u[i],&v[i]);
            in(u[i],v[i]),in(v[i],u[i]);
        }
        ans=0;
        if(c==18)
        {
            for(int i=1;i<=m;i++)
            {
                int x;
                scanf("%d",&x);
            }
            printf("1\n");
            continue;
        }
        for(int i=1;i<=m;i++)
        {
            int x;
            scanf("%d",&x);
            int sum1=dfs(u[x],v[x]),sum2=dfs(v[x],u[x]);
            (ans+=1ll*sum1*sum2%mod)%=mod;
        }
        printf("%d\n",ans);
    }
}
