#include<bits/stdc++.h>
#define INF 1e9
#define LLINF 1e18
#define inf 0x3f3f3f3f
#define ll long long
#define FILE1(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
#define FILE2(x) freopen(x".in","r",stdin),freopen(x".ans","w",stdout)
#define FILE3(x) freopen(x".in","r",stdin)
#define Mod 1000000007
#define iv4 250000002
#define N 505
using namespace std;
int read(){
int x=0,f=1,ch=getchar();
for(;!isdigit(ch);ch=getchar()) f=(ch=='-')?-1:1;
for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
return x*f;
}
int add(int x,int y){return x+y>=Mod?x+y-Mod:x+y;}
int del(int x,int y){return add(x,Mod-y);}
int mul(int x,int y){return ((ll)x*y)%Mod;}
void Add(int &x,int y){x=add(x,y);}
void Del(int &x,int y){x=del(x,y);}
void Mul(int &x,int y){x=mul(x,y);}
int cid,T,n,m,res,ans;
int mp[N][N];
bool vis[N],ok;
struct DSU{
int fa[N];
void init(int n){for(int i=1;i<=n;++i) fa[i]=i;}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void merge(int x,int y){fa[find(x)]=find(y);}
bool same(int x,int y){return find(x)==find(y);}
}dsu;
struct Edge{
int x,y,w;
friend bool operator < (const Edge &a,const Edge &b){
return a.w<b.w;
}
}E[N];
int qpow(int a,int b){
int res=1;
while(b){
if(b&1) Mul(res,a);
Mul(a,a);
b>>=1;
}
return res;
}
void Dfs(int cnt,int sum){
if(ok) return;
if(sum>res) return;
if(cnt==n-1) {
ok=(sum==res);
return;
}
for(int i=1;i<=n;++i){
if(vis[i]) continue;
int mn=INF;
for(int j=1;j<=n;++j){
if(!vis[j]) continue;
mn=min(mn,mp[j][i]);
}
if(mn!=INF){
vis[i]=true;
Dfs(cnt+1,sum+mn);
vis[i]=false;
}
}
}
void dfs(int i){
if(i==m+1){
ok=false;
for(int i=1;i<=n && !ok;++i){
vis[i]=true;
Dfs(0,0);
vis[i]=false;
}
ans+=ok;
return;
}
int x=E[i].x,y=E[i].y,w=E[i].w;
mp[x][y]=mp[y][x]=INF;
dfs(i+1);
mp[x][y]=w,mp[y][x]=INF;
dfs(i+1);
mp[x][y]=INF,mp[y][x]=w;
dfs(i+1);
mp[x][y]=mp[y][x]=w;
dfs(i+1);
}
void solve(){
n=read(),m=read(),res=ans=0,dsu.init(n);
for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) mp[i][j]=INF;
for(int i=1;i<=m;++i) E[i]=(Edge){read(),read(),read()};
sort(E+1,E+m+1);
for(int i=1;i<=m;++i){
int x=E[i].x,y=E[i].y,w=E[i].w;
if(dsu.same(x,y)) continue;
res+=w,dsu.merge(x,y);
}
dfs(1);
int inv=1;
for(int i=1;i<=m;++i) Mul(inv,iv4);
printf("%d\n",mul(ans,inv));
}
int main(){
FILE1("years");
cid=read(),T=read();
while(T--) solve();
return 0;
}