#include<bits/stdc++.h>
using namespace std;
int n,K;
namespace sub {
	int tot=0;
	vector<int>g[38];
#define pii pair<int,int>
	map<int,bool>mp;
	int ans=0;
	vector<pii>h[38];
	int val[38];
	void clr() {
		mp.clear();
		tot=0;
		ans=0;
		for(int i=1; i<=n; i++) g[i].clear(),h[i].clear();
	}
	void add(int x,int y) {
		tot++;
		h[x].push_back({y,tot});
		h[y].push_back({x,tot});
	}
	bool bz[38];
	bool cmp(pii x,pii y) {
		return val[x.first]<val[y.first];
	}
	int bas=0;
	void dfs(int x) {
		bz[x]=1;
		for(auto to:h[x]) {
			if(bz[to.first]) continue;
			bas|=(1<<(to.second-1));
			dfs(to.first);
		}
	}

	int st;
	bool bj[38];
	void dg(int x) {
		if(x==n) {
			for(int i=1; i<n; i++) {
				sort(h[i].begin(),h[i].end(),cmp);
			}
			for(int i=1; i<n; i++) bz[i]=0;
			bas=0;
			dfs(st);
			if(!mp[bas]) {
				mp[bas]=1;
				ans++;
			}
		} else {
			for(int i=1; i<n; i++) {
				if(!bj[i]) {
					val[x]=i;
					bj[i]=1;
					dg(x+1);
					bj[i]=0;
					val[x]=0;
				}
			}
		}
	}
	void mainn() {
		clr();
		int u,v;
		for(int i=1; i<n; i++) {
			cin>>u>>v;
			g[u].push_back(i);
			g[v].push_back(i);
		}
		for(int i=1; i<=n; i++) {
			int sz=g[i].size();
			for(int j=0; j<sz; j++) {
				for(int k=j+1; k<sz; k++) {
					add(g[i][j],g[i][k]);
				}
			}
		}
		for(int i=1; i<=K; i++) {
			cin>>st;
			dg(1);

		}
		cout<<ans<<"\n";
	}
}
namespace sub2 {
#define ll long long
	const long long mo=1e9+7;
	int st;
	void mainn() {
		long long jc1=1,jc2=1;
		for(int i=1; i<=n-2; i++) jc1=(jc1*i)%mo;
		for(int i=1; i<=n-3; i++) jc2=(jc2*i)%mo;
		int W1=0,W2=0;
		for(int i=1; i<=K; i++) {
			scanf("%d",&st);
			if(st==1) {
				W1++;
			} else W2++;
		}
		if(W1==0) W1++,W2--;
		ll oo=jc1;
		ll ans=jc1;
		for(int i=1; i<=min(n-2,W2); i++) {
			oo=(oo-jc2+mo)%mo;
			ans=(ans+oo+mo)%mo;
		}
		printf("%lld\n",ans);
	}
}
int main() {
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int c,T;
	scanf("%d%d",&c,&T);
	while(T--) {
		cin>>n>>K;
		if(n<=10) sub::mainn();
		else {
			int u,v;
			int jvhua=1;
			for(int i=1; i<n; i++) {
				scanf("%d%d",&u,&v);
				if(u!=1) {
					jvhua=0;
				}
			}
			if(jvhua) sub2::mainn();
		}
	}
}
