#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,p=1e9+7;
int c,T,n,k,s,t,deg[N],fac[N],id[3],u[N],v[N],head[N],ecnt=0;
struct edge {int to,nxt,id;}e[N<<1];
void add(int u,int v,int id) {e[++ecnt]=(edge){v,head[u],id};head[u]=ecnt;}
void init(int lim) {
	fac[0]=1;
	for(int i=1; i<=lim; i++) fac[i]=fac[i-1]*i%p;
}
void dfs(int u,int pre) {
	for(int i=head[u]; i; i=e[i].nxt) {
		if(e[i].id==id[2]) {
			t=u;
			break;
		}
	}
	if(t) return;
	for(int i=head[u]; i; i=e[i].nxt) {
		int v=e[i].to;
		if(v==pre) continue;
		dfs(v,u);
		if(t) break;
	}
}
signed main() {
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(nullptr);
	init(1e5);
	cin>>c>>T;
	if(c>=1&&c<=6) {
		while(T--) {
			cin>>n>>k;
			for(int i=1; i<=n; i++) deg[i]=0;
			for(int i=1; i<n; i++) {
				int u,v;
				cin>>u>>v;
				deg[u]++,deg[v]++;
			}
			for(int i=1; i<=k; i++) {int x;cin>>x;}
			int ans=1;
			for(int i=1; i<=n; i++) ans=ans*fac[deg[i]-1]%p;
			cout<<ans<<'\n';
		}
	} else if(c>=7&&c<=10) {
		while(T--) {
			cin>>n>>k;
			for(int i=1; i<=n; i++) deg[i]=head[i]=0;ecnt=0;
			for(int i=1; i<n; i++) {
				cin>>u[i]>>v[i];
				add(u[i],v[i],i),add(v[i],u[i],i);
				deg[u[i]]++,deg[v[i]]++;
			}
			cin>>id[1]>>id[2];
			s=0,t=0;
			dfs(u[id[1]],v[id[1]]);
			if(t) s=u[id[1]];
			else {
				dfs(v[id[1]],u[id[1]]);
				if(t) s=v[id[1]];
			}
			int ans1=1,ans2=1;
			for(int i=1; i<=n; i++) {
				ans1=ans1*fac[deg[i]-1]%p;
				if(i==s||i==t) ans2=ans2*fac[deg[i]-2]%p;
				else ans2=ans2*fac[deg[i]-1]%p;
			}
			cout<<(2*ans1%p-ans2+p)%p<<'\n';
		}
	} else if(c==18) {
		while(T--) {
			cin>>n>>k;
			for(int i=1; i<n; i++) {
				int u,v;
				cin>>u>>v;
			}
			for(int i=1; i<=k; i++) {
				int x;
				cin>>x;
			}
			cout<<1<<'\n';
		}
	} else if(c>=19&&c<=21) {
		while(T--) {
			cin>>n>>k;
			for(int i=1; i<n; i++) {
				int u,v;
				cin>>u>>v;
			}
			for(int i=1; i<=k; i++) {
				int x;
				cin>>x;
			}
			if(k>1) cout<<(k*fac[n-2]%p-k*(k-1)/2%p*fac[n-3]%p+p)%p<<'\n';
			else cout<<fac[n-2]<<'\n';
		}
	}
	return 0;
}
