#include using namespace std; int T,s,w1[100005],ans,d,f,o,i,li[100005],ax[100005],bx[200005],cx[200005],fa[100005],ff[100005],k[100005],b[100005],dp[100005],an; const int mod=1e9+7;bool us[100005]; templateinline void read(T &n){ T w=1;n=0;char ch=getchar(); while(!isdigit(ch)&&ch!=EOF){if(ch=='-')w=-1;ch=getchar();} while(isdigit(ch)&&ch!=EOF)n=(n<<1)+(n<<3)+(ch&15),ch=getchar(); n*=w; } void dfs(int x){ k[++f]=x; for(int g=ax[x];g;g=bx[g])if(cx[g]!=fa[x])fa[cx[g]]=x,ff[cx[g]]=g,dfs(cx[g]); } int ww(int x,int y){int kk=1;while(y){if(y&1)kk=1ll*kk*x%mod;x=1ll*x*x%mod,y>>=1;}return kk;} int main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); read(T),read(T); while(T--){ read(s),read(d),w1[0]=1,f=0;for(int g=1;g<=s;g++)w1[g]=1ll*w1[g-1]*g%mod,li[g]=ax[g]=dp[g]=0; for(int g=1;g1;g--)b[fa[k[g]]]=1ll*b[fa[k[g]]]*b[k[g]]%mod; for(int g=1;g<=d;g++)read(o),us[o]=1;an=0; for(int g=s;g;g--){ int kk=0,ki=1; for(int h=ax[k[g]];h;h=bx[h])if(cx[h]!=fa[k[g]]){ kk=1ll*kk*b[cx[h]]%mod; kk=(kk+1ll*dp[cx[h]]*dp[k[g]])%mod; dp[k[g]]=(1ll*dp[k[g]]*b[cx[h]]+1ll*dp[cx[h]]*ki)%mod; ki=1ll*ki*b[cx[h]]%mod; } int kt=(ff[k[g]]+1)>>1; int kz=1;if(li[k[g]]>1)kz=w1[li[k[g]]-2];dp[k[g]]=1ll*dp[k[g]]*kz%mod,kk=1ll*kk*kz%mod; if(us[kt])kk=(kk+dp[k[g]])%mod,dp[k[g]]=b[k[g]]; int kl=ww(b[k[g]],mod-2); an=(an+1ll*ans*kl%mod*kk)%mod; } ans=(1ll*ans*d+mod-an)%mod,cout<