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

const int N = 1e5 + 105;
const ll MOD = 1e9 + 7;

ll frac[N], invf[N];

ll qpow(ll x, ll y) {
    ll res = 1;
    while(y) {
        if(y & 1ll) res *= x, res %= MOD;
        x *= x;
        x %= MOD;
        y >>= 1ll;
    }
    return res;
}
void init() {
    frac[0] = 1;
    for(int i = 1; i < N; i++)
        frac[i] = frac[i - 1] * (1ll * i) % MOD;
    invf[N - 1] = qpow(frac[N - 1], MOD - 2);
    for(int i = N - 2; i >= 0; i--) {
        invf[i] = invf[i + 1] * (1ll * (i + 1ll)) % MOD;
    }
    return;
}

namespace SUBTASK1 {
    int n, k;
    ll ans = 1;
    int deg[N];

    int main() {
        int T;
        cin >> T;
        for(; T; --T) {
            cin >> n >> k;
            ans = 1;
            for(int i = 1; i < n; i++) {
                int u, v;
                cin >> u >> v;
                deg[u]++, deg[v]++;
            }
            cin >> k;
            for(int i = 1; i <= n; i++) {
                if(!deg[i]) continue;
                ans *= frac[deg[i] - 1];
                ans %= MOD;
            }
            cout << ans << '\n';
            for(int i = 1; i <= n; i++)
                deg[i] = 0;
        }
        return 0;
    }
} // namespace SUBTASK1 k = 1

namespace LINK {
    int n, k, x, y;
    int main() {
        int T;
        cin >> T;
        for(; T; --T) {
            cin >> n >> k;
            for(int i = 1; i < n; i++)
                cin >> x >> y;
            for(int i = 1; i <= k; i++)
                cin >> x;
            cout << "1\n";
        }
        return 0;
    }
} // namespace LINK

namespace CONN {
    int n;
    ll k;

    int main() {
        int T;
        cin >> T;
        for(; T; --T) {
            cin >> n >> k;
            for(int i = 1; i < n; i++) {
                int x, y;
                cin >> x >> y;
            }
            for(int i = 1; i <= k; i++) {
                int x;
                cin >> x;
            }
            if(n == 2) {
                cout << "1\n";
                continue;
            }
            n--;
            cout << ((1ll * k * frac[n - 1] % MOD - 1ll * (k * (k - 1ll) / 2ll) % MOD * frac[n - 2] % MOD) % MOD + MOD) % MOD << '\n';
        }
        return 0;
    }
} // namespace CONN

int main() {
    freopen("traverse.in", "r", stdin);
    freopen("traverse.out", "w", stdout);
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int c; cin >> c;
    init();
    if(c >= 1 && c <= 6) {
        return SUBTASK1::main();
    }
    if(c == 18) {
        return LINK::main();
    }
    if(c >= 19 && c <= 21) {
        return CONN::main();
    }
    return 0;
}
