#include <bits/stdc++.h>
#define ALL(v) begin(v), end(v)
using i64 = int64_t;
const int kMaxN = 1E5 + 5, kMod = 1E9 + 7;
void Add(int &x, int y) {
if ((x += y) >= kMod) x -= kMod;
}
auto Sum(int x, int y) { return Add(x, y), x; }
auto Neg(int x) { return Sum(kMod, -x); }
auto Power(int a, int b, int p = kMod) {
int r = 1;
for (; b; b >>= 1, a = i64{a} * a % p) {
if (b & 1) r = i64{r} * a % p;
}
return r;
}
auto Inv(int a, int p = kMod) { return Power(a, p - 2, p); }
std::array<int, kMaxN> fac, inv;
void Math() {
for (int i = fac[0] = 1; i < kMaxN; ++i) {
fac[i] = i64{fac[i - 1]} * i % kMod;
}
for (int i = 1; i < kMaxN; ++i) inv[i] = Inv(i);
}
int n, k, ans;
std::array<std::vector<int>, kMaxN> adj, adj2;
std::array<int, kMaxN> u, v, e, deg, cnt, val;
std::array<bool, kMaxN> ban;
void Emplace(int u) {
if (cnt[u]) Add(ans, Neg(i64{cnt[u]} * val[u] % kMod));
++cnt[u];
}
std::array<bool, kMaxN> vis;
std::array<int, kMaxN> vl, iv, siz;
void Dfs(int u, int fa) {
vis[u] = true;
if (deg[u] > 1) {
vl[u] = i64{vl[fa]} * val[u] % kMod;
iv[u] = i64{iv[fa]} * (deg[u] - 1) % kMod;
} else {
vl[u] = vl[fa], iv[u] = iv[fa];
}
siz[u] = i64{cnt[u]} * vl[u] % kMod;
for (int v : adj2[u]) {
if (v == fa) continue;
Dfs(v, u);
Add(ans, Neg(i64{siz[u]} * siz[v] % kMod * iv[fa] % kMod * iv[u] % kMod));
Add(siz[u], siz[v]);
}
}
void Proc() {
std::cin >> n >> k, ans = k;
for (int i = 1; i <= n; ++i) adj[i].clear(), ban[i] = false, deg[i] = cnt[i] = 0, adj2[i].clear();
for (int i = 1; i < n; ++i) {
std::cin >> u[i] >> v[i], ++deg[u[i]], ++deg[v[i]];
adj[u[i]].emplace_back(v[i]);
adj[v[i]].emplace_back(u[i]);
}
for (int i = 1; i <= n; ++i) val[i] = inv[deg[i] - 1];
for (int i = 1; i <= k; ++i) {
std::cin >> e[i], ban[e[i]] = true;
}
for (int i = 1; i < n; ++i) {
if (!ban[i]) adj2[u[i]].emplace_back(v[i]), adj2[v[i]].emplace_back(u[i]);
}
for (int i = 1; i <= k; ++i) Emplace(u[e[i]]), Emplace(v[e[i]]);
for (int i = 1; i <= n; ++i) vis[i] = false;
vl[0] = iv[0] = 1;
for (int i = 1; i <= n; ++i) {
if (!vis[i]) Dfs(i, 0);
}
for (int i = 1; i <= n; ++i) ans = i64{ans} * fac[deg[i] - 1] % kMod;
std::cout << ans << '\n';
}
auto main() -> int {
freopen("traverse.in", "r", stdin);
freopen("traverse.out", "w", stdout);
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
Math();
int c, t;
for (std::cin >> c >> t; t; --t) Proc();
return 0;
}