#include<bits/stdc++.h>
#define re register
#define ll long long
#define pa pair<int,int>
using namespace std;
vector<pa> G[1000005];
int a[1000005];
const ll mod=1e9+7,inv2=(1e9+8)/2;
int mp[1005][1005];
int le[1000005],ri[1000005];
ll fpow(re ll x,re ll y=mod-2)
{
	re ll sum=1,base=x;
	while(y)
	{
		if(y&1) sum=sum*base%mod;
		base=base*base%mod;
		y/=2;
	}
	return sum;
}
ll read()
{
	re char c=getchar();
	re ll sum=0,opt=1;
	while(c>'9'||c<'0')
	{
		if(c=='-') opt=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		sum=sum*10+c-'0';
		c=getchar();
	}
	return sum*opt;
}
int li[1000005];
ll cans=0;
ll ctot=0,cnow=1;
int last[1000005],nxt[1000005],to[1000005],tot,bz[1000005];	
ll jc[1000005];
int n,m;
void add(re int x,re int y)
{
	to[++tot]=y;
	nxt[tot]=last[x];
	last[x]=tot;
}
int cp[1000005];
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	jc[0]=1;
	for(int i=1;i<=1e6;i++) jc[i]=(jc[i-1]*i)%mod;
	re int c,T;
	c=read();
	T=read();
	while(T--)
	{

		n=read();
		m=read();
//		m=1;
		for(re int i=1;i<=n;i++)
		{
			vector<pa>().swap(G[i]);
		}
		for(re int i=1;i<n;i++)
		{
			cp[i]=0;
			int x,y;
			x=read();
			y=read();
			G[x].emplace_back(make_pair(y,i));
			G[y].emplace_back(make_pair(x,i));
		}
//		scanf("%d",&a[1]);
		for(re int i=1;i<=m;i++)
		{
			a[i]=read();
			cp[a[i]]=1;
		}
		if(c==18)
		{
			printf("1\n");
			continue;
		}
		if(c>=19&&c<=21)
		{
			re ll ans=m,ans1=m;
			for(re int i=1;i<n-1;i++)
			{
				ans=ans*i%mod;
				if(i>1)
				ans1=ans1*(i-1)%mod;
			}
			printf("%lld\n",(ans-ans1*(m-1)%mod*(inv2)%mod+mod)%mod);
			continue;
		}
		if(c<=6)
		{
			ll zans=1;
			for(int i=1;i<=n;i++)
			{
				int cn=G[i].size();
				ll ans=jc[cn-1];
				zans=zans*ans%mod;
			}
			printf("%lld\n",zans);		
			continue;
		}
//		ll zans=1;
//		for(int i=1;i<=n;i++)
//		{
//			int cn=G[i].size(),cm=0;
//			for(auto j:G[i])
//			{
//				if(cp[j.second]==1)
//				{
//					cm++;
//				}
//			}
//			
//			if(cm==0||cm==1)
//			{
//				ll ans,ans1;
//				ans=jc[cn-1];
//				zans=zans*ans%mod;			
//			}
//			else
//			{
////				printf("%lld\n",cm);
//				re ll ans=cm,ans1=cm;
//				for(re int i=1;i<cn-1;i++)
//				{
//					ans=ans*i%mod;
//					if(i>1)
//					ans1=ans1*(i-1)%mod;
//				}		
//				zans=zans*(ans-ans1*(cm-1)%mod*(inv2)%mod+mod)%mod;
//			}
//		}
//		printf("%lld\n",zans);
	}
	return 0;
}

