#include <bits/stdc++.h>
#define debug cerr << "\33[33m[" << __LINE__ << "]\33[m "
#define all(x) x.begin(), x.end()
#define SZ(x) ((int) x.size() - 1)
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); ++i)
#define DF(i, x, y) for (int i = (x); i >= (y); --i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> T& chkmin(T& x, T y) {return x = min(x, y);}
template <typename T> T& chkmax(T& x, T y) {return x = max(x, y);}
template <typename T> T& read(T& x) {
x = 0; int f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = - 1;
for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x *= f;
}
const int N = 1e5 + 10, MOD = 1e9 + 7;
void add(int& x, ll y) {
x = (x + y) % MOD;
}
int c, n, k, f[N][2][2][2], fac[N], x[N], y[N], z[N], ans;
vector <pair <int, int>> v[N];
int dp[3][2][2], ndp[3][2][2];
void dfs(int x, int fa) {
ms(f[x], 0);
bool leaf = true;
for (auto [i, j]: v[x])
if (i != fa) {
leaf = false;
dfs(i, x);
}
if (leaf) {
f[x][1][0][1] = 1;
} else {
if (x == 1) {
if (v[x].size() == 1) {
ans = 0;
auto [i, j] = v[x].front();
F(a, 0, 1)
F(b, 0, 1)
F(c, 0, 1)
if (b || (j && a && c)) add(ans, f[i][a][b][c]);
return;
}
}
int deg = 0;
ms(dp, 0);
dp[0][0][1] = 1;
for (auto [i, j]: v[x])
if (i != fa) {
deg++;
ms(ndp, 0);
F(a, 0, 2)
F(b, 0, 1)
F(t1, 0, 1)
F(c, 0, 1)
F(d, 0, 1)
F(t2, 0, 1) {
if (c) {
if (t2) add(ndp[a][b][t1], (ll) dp[a][b][t1] * f[i][c][d][t2]);
}
if (a < 2) {
if (c) {
if (j && (t1 && t2)) add(ndp[a + 1][1][t1 && t2], (ll) dp[a][b][t1] * f[i][c][d][t2]);
else {
if (t1 && t2) {
add(ndp[a + 1][b | d][1], (ll) dp[a][b][t1] * f[i][c][d][t2]);
} else if (t1) {
add(ndp[a + 1][d][0], (ll) dp[a][b][t1] * f[i][c][d][t2]);
} else if (t2) {
add(ndp[a + 1][b][0], (ll) dp[a][b][t1] * f[i][c][d][t2]);
}
}
} else {
if (t1) add(ndp[a + 1][d][0], (ll) dp[a][b][t1] * f[i][c][d][t2]);
}
}
}
swap(dp, ndp);
}
if (x == 1) {
ans = (ll) (dp[2][1][0] + dp[2][1][1]) * fac[deg - 2] % MOD;
} else {
F(a, 1, 2)
F(b, 0, 1) F(t, 0, 1) {
add(f[x][a == 1][b][t && (a == 1)], (ll) dp[a][b][t] * fac[deg - 1]);
}
}
}
}
void zhk() {
read(n), read(k);
F(i, 1, n) v[i].clear();
fac[0] = 1;
F(i, 1, n) fac[i] = (ll) fac[i - 1] * i % MOD;
F(i, 1, n - 1) {
z[i] = 0;
read(x[i]), read(y[i]);
}
F(i, 1, k) {
int tmp;
read(tmp);
z[tmp] = 1;
}
F(i, 1, n - 1) {
v[x[i]].emplace_back(y[i], z[i]);
v[y[i]].emplace_back(x[i], z[i]);
}
dfs(1, 0);
cout << ans << '\n';
}
signed main() {
freopen("traverse.in", "r", stdin);
freopen("traverse.out", "w", stdout);
int _; read(c), read(_);
while (_--) zhk();
return 0;
}