#include<bits/stdc++.h>
using namespace std;
#define ll long long 
const int mod=1e9+7,N=1e5+1;
int c,T,n,k;
ll ans;
struct edge{
	int u,v,id;
};
struct Tree{
	vector<edge>r[N];
	void addedge(int u,int v,int id){
		r[u].push_back((edge){u,v,id});
		r[v].push_back((edge){v,u,id});
	}
}t;
vector<edge>e;
edge et[N];
void taskA(){
//	ans=0; 
//	for(edge ed:e){
//		if(ed.u==1){
//			++ans;
//		}else if(ed.v==n){
//			++ans;
//		}else{
//			ans+=2;
//		}
//		ans%=mod;
//	}printf("%lld\n",ans%mod);
	printf("1\n");
}
void taskB(){
	ans=1;
	for(int i=1;i<=n-2;++i){
		(ans*=i)%=mod;
	}
	printf("%lld\n",(ans*k)%mod);
	
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	scanf("%d%d",&c,&T);
	while(T--){
		scanf("%d%d",&n,&k);
		for(int i=1;i<n;++i){
			int u,v;
			scanf("%d%d",&u,&v);
//			t.addedge(u,v,i);
			et[i]=(edge){u,v,i};
		}
		for(int i=1;i<=k;++i){
			int id;
			scanf("%d",&id);
			e.push_back(et[id]);
		}
		if(c==18){
			taskA();
		}
		else if(c>=19&&c<=21){
			taskB();
		}
	}
	return 0;
}

