#include <bits/stdc++.h>
using namespace std;
#define il inline
#define pb push_back
using ll=long long;
const int N=1e5+5,mod=1e9+7;
using pii=pair<int,int>;
#define fi first
#define se second 
int n,K;
pii e[N];
ll ans;
bool vis[N];
vector<int> a[N];
void dfs(int x,int cnt) {
	if(cnt==n-1) {
		ans++;
		return ;
	}
	for(int i=0;i<(int)a[x].size();i++) {
		if(!vis[a[x][i]]) {
			vis[a[x][i]]=1;
			dfs(a[x][i],cnt+1);
			vis[a[x][i]]=0;
		}
	}
}
int main() {
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int ID,_;scanf("%d%d",&ID,&_);
	while(_--) {
		scanf("%d%d",&n,&K);
		for(int i=1;i<n;i++) scanf("%d%d",&e[i].fi,&e[i].se);
		int rt=0;
		for(int i=1;i<=K;i++) scanf("%d",&rt);
		if(ID==18) {
			puts("1");
			continue;
		}
		else if(ID>=19&&ID<=21) {
			ans=1;
			ll t=1;
			for(int i=1;i<n;i++) ans=ans*i%mod,t=t*(i<n-1?i:1)%mod;
			printf("%lld\n",(ans*K%mod-(K-1)*t%mod+mod)%mod);
			continue;
		}
		for(int i=1;i<n;i++) a[i].clear();
		for(int i=1;i<n;i++) { 
			for(int j=1;j<n;j++) {
				if(i==j) continue;
				if(e[i].fi==e[j].fi||e[i].fi==e[j].se) a[i].pb(j);
				else if(e[i].se==e[j].fi||e[i].se==e[j].se) a[i].pb(j);
			}
		}
		ans=0;
		for(int i=1;i<n;i++) vis[i]=0;
		vis[rt]=1;
		dfs(rt,1);
		printf("%lld\n",ans);
	}
	return 0;
}
/*
zsyz&xwb rp++
*/
