#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=20,INF=0x3f3f3f3f3f3f3f3f,mod=1e9+7;
int qpow(int x,int p){
int y=1;
while(p){
if(p&1) y=y*x%mod;
x=x*x%mod,p>>=1;
}
return y;
}
int c,T,n,m,mp[N][N],ne_ans,tmp_mp[N][N],ans1,ans2;
bool bjt[N];
int f[N];
int ss2(int S){
if(S==(1<<n+1)-2) return 0;
int ans=INF;
for(int i=1;i<=n;i++) if((~S)>>i&1){
int tmp=INF;
for(int j=1;j<=n;j++) if(S>>j&1) tmp=min(tmp,tmp_mp[j][i]);
ans=min(ans,tmp+ss2(S|1<<i));
}
return ans;
}
void ss(int x,int y){
if(x==n+1){
ans2++;
for(int i=1;i<=n;i++) if(ss2(1<<i)==ne_ans){
ans1++;
break;
}
return;
}
tmp_mp[x][y]=INF;
if(mp[x][y]!=INF) tmp_mp[x][y]=mp[x][y],y==n?ss(x+1,1):ss(x,y+1),tmp_mp[x][y]=INF;
y==n?ss(x+1,1):ss(x,y+1);
}
void solve(){
memset(mp,0x3f,sizeof(mp));
memset(f,0x3f,sizeof(f));
memset(bjt,0,sizeof(bjt));
memset(tmp_mp,0x3f,sizeof(tmp_mp));
ne_ans=ans1=ans2=0;
cin>>n>>m;
for(int i=1,u,v,w;i<=m;i++) cin>>u>>v>>w,mp[u][v]=mp[v][u]=w;
f[1]=0;
for(int i=1;i<=n;i++){
int gt=0;
for(int j=1;j<=n;j++) if(!bjt[j]&&f[j]<f[gt]) gt=j;
ne_ans+=f[gt],bjt[gt]=1;
for(int j=1;j<=n;j++) f[j]=min(f[j],mp[gt][j]);
}
ss(1,1);
cout<<(ans1*qpow(ans2,mod-2)%mod+mod)%mod<<"\n";
}
signed main(){
freopen("years.in","r",stdin);
freopen("years.out","w",stdout);
cin.tie(0)->sync_with_stdio(0);
cin>>c>>T;
while(T--) solve();
return 0;
}