// Kirov reporting #include #define ll long long #define debug(...) fprintf(stderr,__VA_ARGS__) using namespace std; inline static int read(){ int sum=0,ch=getchar(),neg=0; while(!isdigit(ch)) neg=(ch=='-'),ch=getchar(); while(isdigit(ch)) sum=sum*10+(ch^48),ch=getchar(); return neg?-sum:sum; } constexpr int mod=1e9+7,N=1e5; ll ans; struct{int v,nxt;}e[200005]; int n,m,head[100005],deg[100005],ecnt; void add(int u,int v){e[++ecnt]={v,head[u]},head[u]=ecnt,deg[v]++;} int fac[100005],inv[100005],val[100005]; bool flag[100005]; int dp[100005][2]; void dfs(int u,int fa,bool tp){ for(int i=head[u];i;i=e[i].nxt){ int v=e[i].v; if(v==fa) continue; dfs(v,u,flag[i/2]); ans=(ans+((ll)(dp[u][0]+dp[u][1])*dp[v][1]+(ll)dp[u][1]*dp[v][0])%mod*val[u])%mod; dp[u][0]=(dp[u][0]+dp[v][0])%mod,dp[u][1]=(dp[u][1]+dp[v][1])%mod; } if(deg[u]==1) dp[u][tp]=1; else{ if(tp) dp[u][1]=(dp[u][0]+dp[u][1])%mod,dp[u][0]=0; dp[u][0]=(ll)dp[u][0]*val[u]%mod,dp[u][1]=(ll)dp[u][1]*val[u]%mod; } } signed main(){ freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); read(),*fac=*inv=1,inv[N]=716327852; for(int i=1;i<=N;i++) fac[i]=(ll)fac[i-1]*i%mod; for(int i=N-1;i;i--) inv[i]=inv[i+1]*(i+1ll)%mod; for(int T=read();T;T--){ n=read(),m=read(),memset(head+1,0,4*n),memset(deg+1,0,4*n),ecnt=1; for(int i=1,u,v;i1?fac[deg[i]-2]:0)%mod; ans=0,dfs(max_element(deg+1,deg+n+1)-deg,0,0); printf("%lld\n",mul*ans%mod); } return 0; }