#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
const int mod=1e9+7;
int qpow(int n,int m)
{
	int ans=1;
	while(m)
	{
		if(m&1)ans=ans*n%mod;
		n=n*n%mod;
		m>>=1;
	}
	return ans;
}
int fact[N],invfact[N];
int c,T;
int n,k;
int cnte,first[N];
struct edge{int u,v,next;}e[N*2];
void Build(int u,int v)
{
	e[++cnte].u=u;
	e[cnte].v=v;
	e[cnte].next=first[u];
	first[u]=cnte;
}
int son[N];
void dfs_k1(int u,int fa)
{
	son[u]=0;
	for(int i=first[u];i;i=e[i].next)
	{
		if(e[i].v==fa)continue;
		son[u]++;
		dfs_k1(e[i].v,u);
	}
}
int fa[N];
void dfs_k2(int u,int father)
{
	son[u]=0;
	fa[u]=father;
	for(int i=first[u];i;i=e[i].next)
	{
		if(e[i].v==father)continue;
		son[u]++;
		dfs_k2(e[i].v,u);
	}
}
signed main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	fact[0]=invfact[0]=1;
	for(int i=1;i<N;i++)
	{
		fact[i]=fact[i-1]*i%mod;
		invfact[i]=qpow(fact[i],mod-2);
	}
	cin>>c>>T;
	while(T--)
	{
		cnte=0;
		cin>>n>>k;
		for(int i=1;i<=n;i++)first[i]=0;
		for(int i=1;i<n;i++)
		{
			int u,v;
			cin>>u>>v;
			Build(u,v);
			Build(v,u);
		}
		if(k==1)
		{
			int x;
			cin>>x;
			int root=e[x*2-1].u;
			dfs_k1(root,0);
			int ans=1;
			son[root]--;
			for(int i=1;i<=n;i++)ans=ans*fact[son[i]]%mod;
			cout<<ans<<'\n';
			continue;
		}
		else if(k==2)
		{
			int ans=0;
			int root1,root2;
			int x;
			cin>>x;
			root1=e[x*2-1].u;
			dfs_k1(root1,0);
			son[root1]--;
			int sum=1;
			for(int i=1;i<=n;i++)sum=sum*fact[son[i]]%mod;
			ans=(ans+sum)%mod;
			cin>>x;
			root2=e[x*2-1].u;
			dfs_k1(root2,0);
			son[root2]--;
			sum=1;
			for(int i=1;i<=n;i++)sum=sum*fact[son[i]]%mod;
			ans=(ans+sum)%mod;
			
			dfs_k2(root1,0);
			int now=root2;
			while(now)
			{
				son[now]--;
				now=fa[now];
			}
			sum=1;
			for(int i=1;i<=n;i++)sum=sum*fact[son[i]]%mod;
			ans=(ans-sum+mod)%mod;
			cout<<ans<<'\n';
		}
		else if(c==18)
		{
			for(int i=1;i<=k;i++)
			{
				int x;
				cin>>x;
			}
			cout<<1<<'\n';
		}
		else if(c>=19&&c<=21)
		{
			for(int i=1;i<=k;i++)
			{
				int x;
				cin>>x;
			}
			cout<<(k*fact[n-2]%mod-(k*(k-1)%mod*qpow(2,mod-2)%mod*fact[n-3]%mod)+mod)%mod<<'\n';
		}
	}
	return 0;
}
