#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10,P=1e9+7;
int h[2*N],nxt[2*N],pre[2*N],idx;
int ht[2*N],nxtt[2*N],pret[2*N],in[N],idxt;
int n,q,T,c,root,vis[N];
void add(int x,int y)
{
	h[++idx]=y;
	nxt[idx]=pre[x];
	pre[x]=idx;
}
void addt(int x,int y)
{
	ht[++idxt]=y;
	in[y]++;
	nxtt[idxt]=pret[x];
	pret[x]=idxt;
}
void dfs(int x,int fa)
{
	for(int i=pre[x];i;i=nxt[i])
	{
		for(int j=nxt[i];j;j=nxt[j])
		{
			addt((i+1)/2,(j+1)/2),addt((j+1)/2,(i+1)/2);
		}
	}
	for(int i=pre[x];i;i=nxt[i])
	{
		if(h[i]==fa) continue;
		dfs(h[i],x);
	}
}
ll dfst(int x)
{
	int cnt=0;
	ll ans=0;
	for(int i=pret[x];i;i=nxtt[i])
	{
		if(vis[ht[i]]) continue;
		cnt++;
		vis[ht[i]]=1;
		ans=(ans+dfst(ht[i]))%P;
		vis[ht[i]]=0;
	}
	if(cnt==0) return 1;
	return ans;
}
int main()
{
	int i,j,k;
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	scanf("%d%d",&c,&T);
	while(T--)
	{
		scanf("%d%d",&n,&q);
		memset(pre,0,sizeof(pre));
		idx=0;
		int flag=0;
		for(i=1;i<n;i++)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			add(x,y),add(y,x);
			if(x!=1) flag=1;
		}
		dfs(1,0);
//		for(i=1;i<n;i++)
//		{
//			for(j=pret[i];j;j=nxtt[j]) cout<<ht[j]<<" ";
//			cout<<endl;
//		}
		ll ans=0;
		for(i=1;i<=q;i++)
		{
			scanf("%d",&k);
			vis[k]=1;
			if(q<=2) ans+=dfst(k);
			else
			{
				if(in[k]==1) ans=(ans+n)%P;
				else ans=(ans+2*n)%P;
			}
			vis[k]=0;
		}
		if(q>2)
		{
			if(flag==0) ans=(n*(n-1)%P);
		}
		printf("%lld\n",ans);
	}
}
