#include #include #define MN 100000 typedef long long LL; const int mod=1000000007; int qpow(LL bsc,int x){ LL ret=1; while(x){ if(x&1) ret=(ret*bsc)%mod; bsc=(bsc*bsc)%mod; x>>=1; } return ret; } int inv[MN+5]; void initialize(){ for(int i=1;i<=MN;i++) inv[i] = qpow(i,mod-2); } int n,m; int rn,hd[MN+5],to[MN*2+5],nxt[MN*2+5],sz[MN+5]; int normal[MN+5],error[MN+5]; struct path{ int cnt,a[MN+5]; bool fixed; void clear(){ cnt = 0; fixed = false; } void push(int x){ if(fixed) return; a[++cnt] = x; } void pop(){ if(fixed) return; --cnt; } }p; void _add(int u,int v){ to[rn]=v; nxt[rn]=hd[u]; hd[u]=rn++; } void add(int u,int v){ _add(u,v),_add(v,u); sz[u]++,sz[v]++; } void dfs(int u,int f){ p.push(u); if(u==m) p.fixed=true; normal[u] = inv[sz[u]]; if(u==1){ error[u] = (1ll*(sz[u]-1)*inv[sz[u]])%mod; error[u] = (1ll*error[u]*inv[sz[u]-1])%mod; }else{ error[u] = (1ll*(sz[u]-2)*inv[sz[u]])%mod; error[u] = (1ll*error[u]*inv[sz[u]-1])%mod; } for(int i=hd[u];~i;i=nxt[i]){ if(to[i]==f) continue; dfs(to[i],u); } p.pop(); } void solve(){ memset(hd,0xff,sizeof(hd)),rn=0; memset(sz,0,sizeof(sz)); p.clear(); scanf("%d%d",&n,&m); if(n==1){ puts("1"); return; } for(int i=2,u,v;i<=n;i++){ scanf("%d%d",&u,&v); add(u,v); } dfs(1,0); LL ans=0,tans=1; for(int i=1;i