#include #define MAXN 100010 #define mod 1000000007 using namespace std; int cid, T, n, m; int u[MAXN], v[MAXN], fa[MAXN]; vector ed[MAXN]; long long fac[MAXN], ifac[MAXN]; long long f[MAXN][3], invf[MAXN]; bool b[MAXN]; long long all0, sum, w; long long fastpow(long long a, long long b) { long long ans = 1; while (b) { (b & 1) && (ans = ans * a % mod); a = a * a % mod, b >>= 1; } return ans; } void dfs1(const int p) { for (int q : ed[p]) if (q != fa[p]) { fa[q] = p, dfs1(q); } return; } void dfs2(const int p) { for (int q : ed[p]) if (q != fa[p]) dfs2(q); all0 = 1; invf[p] = ifac[ed[p].size() - 1] % mod; for (int q : ed[p]) if (q != fa[p]) { all0 = all0 * f[q][0] % mod; invf[p] = invf[p] * invf[q] % mod; } f[p][0] = fac[ed[p].size() - 1] * all0 % mod; if (ed[p].size() > 1) { sum = 0; for (int q : ed[p]) if (q != fa[p]) { w = f[q][2] * invf[q] % mod; f[p][1] = (f[p][1] + w * sum) % mod; sum = (sum + w) % mod; } for (int q : ed[p]) if (q != fa[p] && b[q]) { w = f[q][2] * invf[q] % mod; f[p][1] = (f[p][1] + (w + 1) * (w - sum + mod) % mod) % mod; } sum = 0; for (int q : ed[p]) if (q != fa[p] && b[q]) { w = (f[q][2] * invf[q] + 1) % mod; f[p][1] = (f[p][1] + w * sum) % mod; sum = (sum + w) % mod; } f[p][1] = f[p][1] * fac[ed[p].size() - 2] % mod * all0 % mod; } for (int q : ed[p]) if (q != fa[p]) { w = fac[ed[p].size() - 1] * all0 % mod * invf[q] % mod; f[p][1] = (f[p][1] + w * f[q][1]) % mod; if (b[q]) f[p][1] = (f[p][1] + (mod - w) * (f[q][0] + f[q][2])) % mod; } if (ed[p].size() > 1) for (int q : ed[p]) if (q != fa[p]) { w = fac[ed[p].size() - 2] * all0 % mod * invf[q] % mod; f[p][2] = (f[p][2] + w * f[q][2]) % mod; if (b[q]) f[p][2] = (f[p][2] + (mod - w) * (f[q][0] + f[q][2])) % mod; } return; } int main() { freopen("traverse.in", "r", stdin); freopen("traverse.out", "w", stdout); ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> cid >> T; while (T--) { cin >> n >> m; fac[0] = 1; for (int i = 1; i <= n; ++i) fac[i] = fac[i - 1] * i % mod; ifac[n] = fastpow(fac[n], mod - 2); for (int i = n; i; --i) ifac[i - 1] = ifac[i] * i % mod; for (int i = 1; i < n; ++i) { cin >> u[i] >> v[i]; ed[u[i]].push_back(v[i]); ed[v[i]].push_back(u[i]); } dfs1(1); for (int i = 1; i < n; ++i) if (fa[u[i]] != v[i]) swap(u[i], v[i]); for (int i = 1; i <= m; ++i) { int a; cin >> a; b[u[a]] = 1; } dfs2(1); cout << (mod - f[1][1]) % mod << "\n"; for (int i = 1; i <= n; ++i) { ed[i].clear(); f[i][0] = f[i][1] = f[i][2] = 0; b[i] = 0, fa[i] = 0; } } return 0; }