#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LOG(FMT...) fprintf(stderr, FMT) using namespace std; typedef long long ll; typedef unsigned long long ull; // mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); template istream &operator>>(istream &is, vector &v) { for (T &x : v) is >> x; return is; } template ostream &operator<<(ostream &os, const vector &v) { if (!v.empty()) { os << v.front(); for (int i = 1; i < v.size(); ++i) os << ' ' << v[i]; } return os; } const int P = 1000000007; int norm(int x) { return x >= P ? (x - P) : x; } void add(int &x, int y) { if ((x += y) >= P) x -= P; } void sub(int &x, int y) { if ((x -= y) < 0) x += P; } void exGcd(int a, int b, int &x, int &y) { if (!b) { x = 1; y = 0; return; } exGcd(b, a % b, y, x); y -= a / b * x; } int inv(int a) { int x, y; exGcd(a, P, x, y); return norm(x + P); } const int N = 100010; int nv[N]; int main() { #ifdef ELEGIA freopen("test.in", "r", stdin); int nol_cl = clock(); #endif ios::sync_with_stdio(false); cin.tie(nullptr); for (int i = 1; i < N; ++i) nv[i] = inv(i); int T; cin >> T; while (T--) { int n, m; cin >> n >> m; --m; vector> g(n); for (int rep = 1; rep < n; ++rep) { int u, v; cin >> u >> v; --u; --v; g[u].push_back(v); g[v].push_back(u); } vector prt(n), vis(n); function dfs = [&](int u) { vis[u] = 1; for (int v : g[u]) if (!vis[v]) { prt[v] = u; dfs(v); } }; prt[0] = -1; dfs(0); int p0 = 1, p1 = 0; while (m) { m = prt[m]; int ch = g[m].size(); if (m) --ch; p1 = (p1 + p0 * (ll)(ch - 1) % P * nv[g[m].size() - 1]) % P * nv[g[m].size()] % P; p0 = p0 * (ll)nv[g[m].size()] % P; } cout << norm(p0 + p1) << '\n'; } #ifdef ELEGIA LOG("Time: %dms\n", int ((clock() -nol_cl) / (double)CLOCKS_PER_SEC * 1000)); #endif return 0; }