#include<bits/stdc++.h>
using namespace std;
int c;
int t;
int n;
long long k;
int a[1000001];
struct node{
	int to;
	int ne;
}e[2000001];
int h[1000001];
int p;
int flag[1000001];
int idx;
long long ans=1;
int x,y;
const long long mod=1000000007;
void add(int u,int v){
	e[++idx].to=v;
	e[idx].ne=h[u];
	h[u]=idx;
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	cin>>c>>t;
	while(t--){
		ans=1;
		if(c==18){
			cout<<"1"<<endl;
			continue;
		}
		cin>>n>>k;
		for(int i=1;i<=n-1;i++){
			cin>>x>>y;
			add(x,y);
			add(y,x);
		}
		for(int i=1;i<=k;i++){
			cin>>p;
			flag[p]=1;
		}
		if(c>=19&&c<=21){
			long long sum=1;
			for(int i=1;i<=n-2;i++){
				ans*=i;
				if(i!=n-2){
					sum*=i;
					sum%=mod;
				}
				ans%=mod;
			}
			ans*=k;
			ans%=mod;
			long long pp=(k*(k-1)/2)%mod;
			sum*=pp;
			sum%=mod;
			ans-=sum;
			ans+=mod;
			ans%=mod;
			cout<<ans<<endl;
			continue;
		}
	}
	return 0;
}
