#include using namespace std; const int N=1e5+5; const int Mod=1e9+7; vector g[N], w[N]; long long jc[N], inv[N], dp[N], tot; bool key[N]; void dfs(int x,int fa) { long long sum=0; for(int i=0;i'9') c=getchar(); int ans=0; while('0'<=c && c<='9') { ans=ans*10+c-'0'; c=getchar(); } return ans; } void work() { int n=read(),k=read(); for(int i=1;i<=n;i++) g[i].clear(), w[i].clear(); tot=0; memset(key,0,sizeof(key)); memset(dp,0,sizeof(dp)); for(int i=1;i1) (ans *= g[i].size()-1) %= Mod; if(g[i].size()>2) (ans *= jc[g[i].size()-2]) %= Mod; } dfs(1,-1); tot=-tot; printf("%lld\n",(ans*tot%Mod+Mod)%Mod); } int main() { freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); int c=read(),T=read(); while(T--) work(); return 0; }