// Hacker Cup 2017 // Round 3 // Sluggish Security // Jacob Plachta #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define LD long double #define PR pair #define Fox(i,n) for (i=0; i=0; i--) #define FoxR1(i,n) for (i=n; i>0; i--) #define FoxRI(i,a,b) for (i=b; i>=a; i--) #define Foxen(i,s) for (i=s.begin(); i!=s.end(); i++) #define Min(a,b) a=min(a,b) #define Max(a,b) a=max(a,b) #define Sz(s) int((s).size()) #define All(s) (s).begin(),(s).end() #define Fill(s,v) memset(s,v,sizeof(s)) #define pb push_back #define mp make_pair #define x first #define y second template T Abs(T x) { return(x<0 ? -x : x); } template T Sqr(T x) { return(x*x); } const int INF = (int)1e9; const LD EPS = 1e-9; const LD PI = acos(-1.0); bool Read(int &x) { char c,r=0,n=0; x=0; for(;;) { c=getchar(); if ((c<0) && (!r)) return(0); if ((c=='-') && (!r)) n=1; else if ((c>='0') && (c<='9')) x=x*10+c-'0',r=1; else if (r) break; } if (n) x=-x; return(1); } #define LIM 2000005 #define MOD 1000000007 int A[LIM],B[LIM],S[LIM]; LL fct[LIM],ifct[LIM]; PR gcd(int a,int b) { if (!b) return(mp(1,0)); PR p=gcd(b,a%b); return(mp(p.y,p.x-p.y*(a/b))); } int Ch(int n,int k) { return(fct[n]*ifct[k]%MOD*ifct[n-k]%MOD); } int main() { // vars int T,t; int N,Ka,Kb; int i,j,a,b; int ans; // precompute factorials and their modular inverses Fox(i,LIM) { fct[i]=i ? fct[i-1]*i%MOD : 1; ifct[i]=gcd(fct[i],MOD).x; if (ifct[i]<0) ifct[i]+=MOD; } // testcase loop Read(T); Fox1(t,T) { // input Read(N); Read(A[0]),Read(Ka),N=1; while (Ka--) { Read(a),Read(b); Fox(i,b) Read(S[i]); while (a--) Fox(i,b) { A[N]=A[N-1]+S[i]; N++; } } Read(B[0]),Read(Kb),N=1; while (Kb--) { Read(a),Read(b); Fox(i,b) Read(S[i]); while (a--) Fox(i,b) { B[N]=B[N-1]+S[i]; N++; } } // pad arrays a=-1; Fox(j,4) { A[N+j]=a--; B[N+j]=a--; } // iterate through ans=1; i=j=a=b=0; while ((i