#include<bits/stdc++.h>
#define rg register int
#define ll long long
using namespace std;
inline int rd()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
	return s*w;
}
inline void wt(int x)
{
	if(x<0) putchar('-'),x=-x;
	if(x>=10) wt(x/10);
	putchar('0'+x%10);
}
const int N=100011,mod=1e9+7;
int num,T;
int n,k;
int sum,h[N];
int sum2,h2[N];
struct node
{
	int to,nxt,w;
}a[N<<1],e[N<<1];
inline void add(int x,int y,int w)
{
	sum++;
	a[sum].to=y;
	a[sum].nxt=h[x];
	a[sum].w=w;
	h[x]=sum;
}
inline void add2(int x,int y)
{
	sum2++;
	e[sum2].to=y;
	e[sum2].nxt=h2[x];
	h2[x]=sum2;
}
int fa[N];
int cnt=0,ans=0;
inline void aa(int x)
{
	cnt++;
	if(cnt==n-1)
	{
		ans++;
		cnt--;
		return ;
	}
	while(1)
	{
		bool flag=0;
		for(rg i=h2[x];i;i=e[i].nxt)
		{
			int y=e[i].to;
			if(!fa[y])
			{
				flag=1;
				break;
			}
		}
		if(flag) break;
		if(fa[x]==-1) break;
		x=fa[x];
	}
	for(rg i=h2[x];i;i=e[i].nxt)
	{
		int y=e[i].to;
		if(!fa[y])
		{
			fa[y]=x;
			aa(y);
			fa[y]=0;
		}
	}
	cnt--;
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	num=rd();T=rd();
	while(T--)
	{
		n=rd();k=rd();
		sum=0;
		for(rg i=1;i<=n;i++) h[i]=0;
		for(rg i=1;i<n;i++)
		{
			int x=rd(),y=rd();
			add(x,y,i);
			add(y,x,i);
		}
		int st=0;
		for(rg i=1;i<=k;i++)
		{
			int x=rd();
			st=x;
		}
		if(num==18)
		{
			wt(1);putchar('\n');
			continue;
		}
		else
		if(num>=19&&num<=21)
		{
			ans=0;
			int u1=1,u2=1;
			for(rg i=1;i<=n-2;i++) u1=1ll*u1*i%mod;
			for(rg i=1;i<=n-3;i++) u2=1ll*u2*i%mod;
			for(rg i=1;i<=k;i++)
			{
				ans+=(u1-1ll*(i-1)*u2%mod+mod)%mod;
				ans%=mod;
			}
			wt(ans);putchar('\n');
		}
		else
		{
			sum2=0;
			for(rg i=1;i<n;i++) h2[i]=0,fa[i]=0;
			for(rg x=1;x<=n;x++)
			{
				for(rg i=h[x];i;i=a[i].nxt)
				for(rg j=h[x];j;j=a[j].nxt)
				if(a[i].w!=a[j].w)
				{
					add2(a[i].w,a[j].w);
				}
			}
			fa[st]=-1;
			ans=0;
			cnt=0;
			aa(st);
			wt(ans);putchar('\n');
		}
	}
	
	return 0;
}

