#include namespace xcy{ const int MAXN=100005; typedef long long ll; const ll MOD=1e9+7; ll fc[MAXN],ic[MAXN],iv[MAXN],deg[MAXN],dg[MAXN],head[MAXN],f[MAXN][2],e[MAXN][2],cnt,t,n,m,p,i,j,k,ans,siz; struct Ed{ll pre,to,val;}ed[MAXN<<1];std::bitsetvis,is; inline void fr(ll &X){X=0;char C=getchar();while(!isdigit(C))C=getchar();while(isdigit(C))X=X*10+C-'0',C=getchar();} inline void out(ll X){if(!X)return;out(X/10);putchar(X%10+'0');} inline void fo(ll X,char C=' '){if(!X)putchar('0');if(X<0)putchar('-'),X=-X;out(X),putchar(C);} inline void add(ll F,ll T,ll V){ed[++cnt]={head[F],T,V};head[F]=cnt;++deg[T];} inline ll pw(ll A,ll B){ll Res=1;for(;B;B>>=1,(A*=A)%=MOD)if(B&1)(Res*=A)%=MOD;return Res;} inline void init(ll N) { for(i=2,iv[0]=iv[1]=1;i<=N;++i)iv[i]=(MOD-MOD/i)*iv[MOD%i]%MOD; for(i=2,fc[0]=fc[1]=ic[0]=ic[1]=1;i<=N;++i) fc[i]=fc[i-1]*i%MOD,ic[i]=ic[i-1]*iv[i]%MOD; } inline void dfs(ll N) { vis[N]=1;for(ll I=head[N],J;I;I=ed[I].pre)if(!vis[J=ed[I].to]) dfs(J),(f[J][1]+=ed[I].val*f[J][0])%=MOD,f[J][0]=(ed[I].val?0:f[J][0]), ((N==1&°[N]==1)?(ans+=f[J][1]*fc[dg[J]])%=MOD:0), (ans+=(f[N][0]*f[J][1]+f[N][1]*(f[J][0]+f[J][1]))%MOD*fc[dg[J]]%MOD*fc[dg[N]])%=MOD, (f[N][0]+=f[J][0]*fc[dg[J]]%MOD*ic[deg[N]-1])%=MOD, (f[N][1]+=f[J][1]*fc[dg[J]]%MOD*ic[deg[N]-1])%=MOD; if(deg[N]==1&&N!=1)f[N][ed[head[N]].val]=1; } int mian() { freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); init(100000);fr(t);fr(t);while(t--){memset(head,0,sizeof(head));cnt=ans=0;siz=1; memset(deg,0,sizeof(deg));memset(f,0,sizeof(f));vis.reset();is.reset(); fr(n);fr(m);for(i=1;i