#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
const int mod=1e9+7;
mt19937 rnd(time(0));
vector<pair<int,int>> g1[maxn],g2[maxn];
int cnt=0;
int n,k,e[maxn],h[maxn*maxn];
unordered_map<int,bool> mp;

int ins[maxn],s[maxn],top;
int id[maxn][maxn];
void dfs(int now,int fa,int hsh)
{
	s[++top]=now;
	ins[now]=1;
	for(int i=0;i<g2[now].size();i++)
	{
		auto t=g2[now][id[now][i]];
		int to=t.first;
		int id=t.second;
		if(to==fa) continue;
		if(ins[to]) continue;
		dfs(to,now,hsh^h[id]);
	}
	if(top==n-1)
	{
		mp[hsh]=1;
//		cout<<hsh<<endl;
	}
	ins[s[top]]=0;
	top--;
}

int fac[maxn];
void solve(int c)
{
	cin>>n>>k;
	for(int i=1;i<n;i++)
	{
		int u,v;
		cin>>u>>v;
		g1[u].push_back(make_pair(v,i));
		g1[v].push_back(make_pair(u,i));
	}
//	for(int i=1;i<=n;i++)
//	{
//		for(int j=0;j<g1[i].size();j++)
//			for(int k=j+1;k<g1[i].size();k++)
//			{
//				int uid=g1[i][j].second;
//				int vid=g1[i][k].second;
////				cout<<uid<<" "<<vid<<endl;
//				g2[uid].push_back(make_pair(vid,++cnt));	
//				g2[vid].push_back(make_pair(uid,cnt));	
//			}
//	}
//	cout<<cnt<<endl;
//	for(int i=1;i<=cnt;i++) h[i]=rnd();
	for(int i=1;i<=k;i++) cin>>e[i];
//	for(int i=1;i<=k;i++)
//	{
//		for(int j=1;j<=n-1;j++)
//			for(int k=0;k<g2[i].size();k++) id[j][k]=k;
//		int f=0,p=1;
//		do
//		{
//			f=0;
//			for(int j=p;j<=n-1;j++)
//				if(next_permutation(id[j],id[j]+g2[j].size()))
//				{
//					dfs(e[i],0,0),f=1;
//					break;
//				}
//				else p=j+1;
//		}
//		while(f);
//	}
//	cout<<mp.size()<<endl;
	if(c==18) return cout<<1<<endl,void();
	if(19<=c&&c<=21)
	{
		fac[0]=1;
		for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod;
		cout<<fac[n-1]<<endl;
		return;
	}
	return;
}

int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int c,T;
	cin>>c>>T;
	while(T--) solve(c);
	return 0;
}
