#include #include #include #include using namespace std; void read(int &x) { x = 0; char c = getchar(); while (c < '0' || c > '9') c = getchar(); while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); } typedef long long ll; const int N = 1e5 + 100; const int MOD = 1e9 + 7; ll rev[N]; ll R(int x) { if (rev[x]) return rev[x]; return rev[x] = (MOD - MOD / x) * R(MOD % x) % MOD; } int n, m, tp; int sta[N], f[N]; vector V[N]; bool dfs(int u, int fa) { sta[++tp] = u; if (u == m) return true; for (int v : V[u]) { if (v == fa) continue; if (dfs(v, u)) return true; } tp--; return false; } int main() { //freopen("0.txt", "r", stdin); rev[0] = rev[1] = 1; int T, a, b; read(T); while (T--) { read(n); read(m); for (int i = 1; i < n; i++) { read(a); read(b); V[a].push_back(b); V[b].push_back(a); } dfs(1, 0); f[tp] = 1; for (int i = tp - 1; i > 0; i--) { f[i] = R(V[sta[i]].size()) * f[i + 1] % MOD; } ll res = 1, ans = f[1]; for (int i = 1; i < tp; i++) { if (i == 1) { if (V[1].size() > 1) ans = (ans + (V[1].size() - 1) * R(V[1].size()) % MOD * R(V[1].size() - 1) % MOD * f[2]) % MOD; } else { if (V[sta[i]].size() > 2) { ans = (ans + (V[sta[i]].size() - 2) * R(V[sta[i]].size()) % MOD * R(V[sta[i]].size() - 1) % MOD * f[i + 1] % MOD * res) % MOD; } } res = res * R(V[sta[i]].size()) % MOD; } printf("%lld\n", ans); for (int i = 1; i <= n; i++) V[i].clear(); tp = 0; } return 0; }