#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i, l, r) for(int i=l; i<=r; i++) #define dow(i, l, r) for(int i=l; i>=r; i--) #define fi first #define se second #define pb push_back #define mp make_pair #define clr(x, c) memset(x,c,sizeof(x)) typedef long long ll; typedef unsigned long long ull; typedef pair Pii; inline int read() { int x=0,f=0; char ch=getchar(); while (ch<'0' || '9'x = x; pt->y = y; pt->n = fir[x]; fir[x] = pt++; pt->x = y; pt->y = x; pt->n = fir[y]; fir[y] = pt++; } #define travel(x) for(edge *p=fir[x]; p; p=p->n) #define Q 1000000007 int dis[maxn], fa[maxn], f0, f1, p[maxn]; void dfs(int x) { travel(x) if (p->y != fa[x]) { dis[p->y] = dis[x] + 1; fa[p->y] = x; dfs(p->y); } } void dfs2(int x) { if (fa[x]) { dfs2(fa[x]); int tot = 0, cnt = 0; travel(fa[x]) { tot += 1; if (p->y != x && p->y != fa[fa[x]]) cnt += 1; } f1 = (1LL * f0 * cnt % Q * p[tot] % Q * p[tot-1] % Q + 1LL * f1 * p[tot] % Q) % Q; f0 = 1LL * f0 * p[tot] % Q; } } inline int pow(int x, int t) { int g = 1; while (t) { if (t&1) g = 1LL*g*x%Q; x = 1LL*x*x%Q; t >>= 1; } return g; } int main() { rep(i, 1, 100000) p[i] = pow(i, Q-2); int T = read(); while (T--) { int n = read(), m = read(); // init(); rep(i, 1, n) fir[i] = 0; pt = e; rep(i, 1, n) dis[i] = fa[i] = 0; rep(i, 1, n-1) { int x = read(), y = read(); addEdge(x, y); } dis[0] = 0; dfs(1); f0 = 1; f1 = 0; dfs2(m); printf("%d\n", (f0+f1) % Q); } }