#include <stdio.h>
#define MAXN 100005
#define MOD 1000000007
int c, T;
int n, k;
int head[MAXN], nxt[MAXN << 2], to[MAXN << 2], tot;
void add(int u, int v){
	to[++tot] = v;
	nxt[tot] = head[u];
	head[u] = tot;
}
long long qupow(long long a, long long b){
	long long res = 1;
	while(b){
		if(b & 1)
			(res *= a) %= MOD;
		(a *= a) %= MOD;
		b >>= 1;
	}
	return res;
}
long long fac[MAXN];
int main(void){
	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);
			add(u, v), add(v, u);
		}
		if(c == 18){
			for(int i = 1; i <= k; i++){
				int e;
				scanf("%d", &e);
				if(e == 1 || e == n - 1)
					printf("1\n");
				else
					printf("2\n");
			}
		}
		fac[0] = 1;
		for(int i = 1; i <= n; i++){
			fac[i] = fac[i - 1] * i % MOD;
		}
		if(19 <= c && c <= 21){
			for(int i = 1; i <= k; i++){
				int e;
				scanf("%d", &e);
				printf("%d\n", fac[n - 2]);
			}
		}
	}
	return 0;
}
