#include<bits/stdc++.h>
using namespace std;
using ui=unsigned int;
using ll=long long;
using ull=unsigned long long;
using i128=__int128;
using u128=__uint128_t;
using pii=pair<int,int>;
#define fi first
#define se second
constexpr int N=2e5+5,mod=1e9+7;
namespace sub1{
	int n,m;pii e[N];int key[N];
	ll fac[N],ans;
	vector<int> Gr[N];
	void dfs(int x,int fa){
		if(x<=n)
			ans=ans*fac[(int)Gr[x].size()-!!fa]%mod;
		for(auto &y:Gr[x])
			if(y!=fa)
				dfs(y,x);
	}
	void solve(){
		cin>>n>>m;
		for(int i=1;i<(n<<1);i++)Gr[i].clear();
		for(int i=1;i<n;i++){
			cin>>e[i].fi>>e[i].se;
			Gr[e[i].fi].emplace_back(i+n);
			Gr[e[i].se].emplace_back(i+n);
			Gr[i+n].emplace_back(e[i].fi);
			Gr[i+n].emplace_back(e[i].se);
		}
		for(int i=1;i<=m;i++)
			cin>>key[i];
		fac[0]=1;
		for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;
		ans=1;
		dfs(key[1]+n,0);
		cout<<ans<<'\n';
	}
}
namespace sub18{
	void solve(){
		cout<<1<<'\n';
	}
}
namespace sub19{
	int n,m;pii e[N];int key[N];
	void solve(){
		cin>>n>>m;
		for(int i=1;i<n;i++)
			cin>>e[i].fi>>e[i].se;
		for(int i=1;i<=m;i++)
			cin>>key[i];
		if(n<=2){
			cout<<1<<'\n';
			return;
		}
		ll fac=1;
		for(int i=1;i<=n-3;i++)fac=fac*i%mod;
		ll ans=m*fac%mod*(n-2)%mod;
		cout<<(ans-(m*(m-1ll)>>1)*fac%mod+mod)%mod<<'\n';
	}
}
namespace sub7{
	int n,m;pii e[N];int key[N];
	ll fac[N],ans;
	vector<int> Gr[N];
	void dfs(int x,int fa){
		if(x<=n)
			ans=ans*fac[(int)Gr[x].size()-!!fa]%mod;
		for(auto &y:Gr[x])
			if(y!=fa)
				dfs(y,x);
	}
	void solve(){
		cin>>n>>m;
		for(int i=1;i<(n<<1);i++)Gr[i].clear();
		for(int i=1;i<n;i++){
			cin>>e[i].fi>>e[i].se;
			Gr[e[i].fi].emplace_back(i+n);
			Gr[e[i].se].emplace_back(i+n);
			Gr[i+n].emplace_back(e[i].fi);
			Gr[i+n].emplace_back(e[i].se);
		}
		for(int i=1;i<=m;i++)
			cin>>key[i];
		fac[0]=1;
		for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;
		if(m==1){
			ans=1,dfs(key[1]+n,0);
			cout<<ans<<'\n';
		}
		else{
			ll tot=0;
			ans=1,dfs(key[1]+n,0),tot=(tot+ans)%mod;
			ans=1,dfs(key[2]+n,0),tot=(tot+ans)%mod;
			cout<<tot<<'\n';
		}
	}
}
namespace suball{
	int n,m;pii e[N];int key[N];
	ll fac[N],ans;
	vector<int> Gr[N];
	void dfs(int x,int fa){
		if(x<=n)
			ans=ans*fac[(int)Gr[x].size()-!!fa]%mod;
		for(auto &y:Gr[x])
			if(y!=fa)
				dfs(y,x);
	}
	void solve(){
		cin>>n>>m;
		for(int i=1;i<(n<<1);i++)Gr[i].clear();
		for(int i=1;i<n;i++){
			cin>>e[i].fi>>e[i].se;
			Gr[e[i].fi].emplace_back(i+n);
			Gr[e[i].se].emplace_back(i+n);
			Gr[i+n].emplace_back(e[i].fi);
			Gr[i+n].emplace_back(e[i].se);
		}
		for(int i=1;i<=m;i++)
			cin>>key[i];
		fac[0]=1;
		for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;
		ll tot=0;
		for(int i=1;i<=m;i++)
			ans=1,dfs(key[1]+n,0),tot=(tot+ans)%mod;
		cout<<tot<<'\n';
	}
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int c,_Test;cin>>c>>_Test;
	if(c==18){
		while(_Test--)sub18::solve();
	}
	else if(c>=19&&c<=21){
		while(_Test--)sub19::solve();
	}
	else if(c>=1&&c<=6){
		while(_Test--)sub1::solve();
	}
	else if(c>=7&&c<=10){
		while(_Test--)sub7::solve();
	}
	else{
		while(_Test--)suball::solve();
	}
	return 0;
}

