/* Divanshu Garg */ #include <vector> #include <list> #include <map> #include <set> #include <queue> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <cstring> #include <climits> #include <cctype> #include <cassert> using namespace std; #define ull unsigned long long #define ill long long int #define pii pair<int,int> #define pb(x) push_back(x) #define F(i,a,n) for(int i=(a);i<(n);++i) #define FD(i,a,n) for(int i=(a);i>=(n);--i) #define FE(it,x) for(it=x.begin();it!=x.end();++it) #define V(x) vector<x> #define S(x) scanf("%d",&x) #define Sl(x) scanf("%llu",&x) #define M(x,i) memset(x,i,sizeof(x)) #define debug(i,sz,x) F(i,0,sz){cout<<x[i]<<" ";}cout<<endl ill ABS(ill a) { if ( a < 0 ) return (-a); return a; } #define fr first #define se second /* Relevant code begins here */ /* Input from file or online */ void input() { #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); #endif } /* Input opener ends */ vector<int> v[505]; int main() { int n; S(n); F(i,0,n) { int m; S(m); F(j,0,m) { int x; S(x); v[i].pb(x); } sort(v[i].begin(),v[i].end()); // F(j,0,v[i].size()) cout << v[i][j] << " "; cout << endl; } int q; S(q); while ( q-- ) { int t, k; S(t); S(k); vector<int> a; F(i,0,k) { int x; S(x); a.pb(x); } sort(a.begin(),a.end()); // F(i,0,a.size()) cout << a[i] << " "; cout << endl; int ans = 0; F(i,0,n) { int matches = 0; int x1 = 0, x2 = 0; while ( x1 < v[i].size() && x2 < a.size() ) { // cout << " -- " << x1 << " " << x2 << endl; if ( v[i][x1] == a[x2] ) { matches++; x1++; x2++; } else if ( v[i][x1] < a[x2] ) x1++; else x2++; } // cout << matches << endl; if ( t == 1 && matches == k ) ans++; if ( t == 2 && matches > 0 ) ans++; if ( t == 3 && matches > 0 && matches < k ) ans++; } printf("%d\n", ans); } return 0; }