#include using namespace std; typedef long long LL; const LL p = 1E9 + 7; LL qpow(LL a, LL b) { if (!b) return 1; LL t = qpow(a, b >> 1); t = t * t % p; if (b & 1) t = t * a % p; return t; } const int N = 1E5 + 5; int n, m, fa[N]; vector a[N]; void dfs(int x) { for (int i = 0; i < (int)a[x].size(); i++) { if (fa[a[x][i]] == -1) { fa[a[x][i]] = x; dfs(a[x][i]); } } } void solve() { scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) a[i].clear(); for (int i = 2; i <= n; i++) { int x, y; scanf("%d %d", &x, &y); a[x].push_back(y); a[y].push_back(x); } memset(fa, -1, sizeof fa); fa[1] = 0; dfs(1); vector deg; while (true) { m = fa[m]; if (m) deg.push_back((int)a[m].size()); else break; } reverse(deg.begin(), deg.end()); LL ans = 0; for (int i = -1; i < (int)deg.size(); i++) { // distract at i if (i == 0 && deg[i] == 1) continue; if (i >= 1 && deg[i] == 2) continue; LL tmp = 1; for (int j = 0; j < (int)deg.size(); j++) { if (j == i) { if (i == 0) tmp *= qpow(deg[i], p - 2); if (i >= 1) tmp *= 1LL * (deg[i] - 2) * qpow(deg[i] * (deg[i] - 1) % p, p - 2 ) % p; } else tmp *= qpow(deg[j], p - 2); tmp %= p; } // cerr << i << ": " << tmp << endl; ans += tmp; } printf("%lld\n", ans % p); } int main() { int T; cin >> T; while (T--) { solve(); } return 0; }