#include<bits/stdc++.h>
using namespace std;
const long long maxn=1e5+5;
const long long mod=1e9+7;
long long n,k;
struct edge
{
	long long a,b;
}e[maxn<<1];
long long head[maxn],cnt=0;
void add(long long a,long long b)
{
	e[++cnt]={b,head[a]};
	head[a]=cnt;
}
void solveA()
{
	cin>>n>>k;
	long long a,b;
	for(long long i=1;i<n;i++)
	{
		cin>>a>>b;
	}
	for(long long i=1;i<=k;i++)
	{
		cin>>a;
	}
	cout<<1<<'\n';
	return ;
}
void solveB()
{
	cin>>n>>k;
	long long a,b;
	for(long long i=1;i<n;i++)
	{
		cin>>a>>b;
	}
	for(long long i=1;i<=k;i++)
	{
		cin>>a;
	}
	n--;
	if(n==1||n==2)
	{
		cout<<1<<'\n';
		return ;
	}
	long long ans=1;
	for(long long i=1;i<=n-2;i++)
	{
		ans=(ans*i)%mod;
	}
	if(n-k==0||n-k==1)
	{
		cout<<ans*((n*(n-1)/2)%mod)%mod<<'\n';
	}
	else
	{
		cout<<((n*(n-1)-(n-k)*(n-k-1))/2)%mod*ans%mod<<'\n';
	}
}
int main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	long long c,t;
	cin>>c>>t;
	while(t--)
	{
		if(c==18)
		{
			solveA();
		}
		else if(c==19||c==20)
		{
			solveB();
		}
	}
}
