#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;

const int MA=1e5+10, mdn=1e9+7;
int tst, q;
int n, k;
ull ans=0;

struct lin{
	int u, v;
	vector<int> s;
	bool mk;
}t[MA];
int s[MA];

void dfs(int pos, int fa, int num){
	if(num==n-1){
		ans++;
		ans%=mdn;
		return;
	}
	for(int i=0;i<t[pos].s.size();i++){
		if(i==fa||t[i].mk) continue;
		t[i].mk=1;
		dfs(i,pos,num+1);
		t[i].mk=0;
	}
}

int main(){
	//
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	//
	scanf("%d%d",&tst,&q);
	for(int ii=1;ii<=q;ii++){
		ans=0;
		scanf("%d%d",&n,&k);
		for(int i=1;i<n;i++){
			scanf("%d%d",&t[i].u,&t[i].v);
			for(int j=1;j<i;j++){
				if(t[j].u==t[i].u||t[j].v==t[i].u){
					t[j].s.push_back(i);
				}
				if(t[j].u==t[i].v||t[j].v==t[i].v){
					t[j].s.push_back(i);
				}
			}
		}
		for(int i=1;i<=k;i++){
			scanf("%d",&s[i]);
		}
		for(int i=1;i<=k;i++){
			dfs(s[i],0,1);
		}
		printf("%d\n",ans);
	}
	return 0;
}
