#include <bits/stdc++.h>
using namespace std;
int c ,T;
int n ,k;
vector<int> e[100005];
struct edge{
	int u ,v;
}a[100005];
int b[100005];
long long ans=1 ,mod=1e9+7;
long long p[100005];
void dfs(int u ,int fa){
	ans*=p[e[u].size()-1];
	ans%=mod;
	for(auto v:e[u])
		if(v!=fa)
			dfs(v ,u);
}
int main(){
	freopen("traverse.in" ,"r" ,stdin);
	freopen("traverse.out" ,"w" ,stdout);
	cin.tie(0) ,cout.tie(0) ,ios::sync_with_stdio(false);
	cin >> c >> T;
	p[0]=1;
	for(int i=1;i<=100000;i++)
		p[i]=p[i-1]*i%mod;
	while(T--){
		ans=1;
		cin >> n >> k;
		for(int i=1;i<=n;i++)
			e[i].clear();
		for(int i=1;i<n;i++){
			int u ,v;
			cin >> u >> v;
			a[i]={u ,v};
			e[u].push_back(v) ,e[v].push_back(u);
		}
		for(int i=1;i<=k;i++)
			cin >> b[i];
		if(k==1){
			int u=a[b[1]].u ,v=a[b[1]].v;
			dfs(u ,v);
			dfs(v ,u);
//			if(e[u].size()>1&&e[v].size()>1)
//				ans=ans*2%mod;
			cout << ans << endl;
		}else{
			cout << 1 << endl;
		}
	}
}
