#include <iostream> #include <sstream> #include <cstdio> #include <cmath> #include <cstring> #include <cctype> #include <string> #include <vector> #include <list> #include <set> #include <map> #include <queue> #include <stack> #include <algorithm> #include <functional> using namespace std; #define DEBUG(x) cout << '>' << #x << ':' << x << endl; #define REP(i,n) for(int i=0;i<(n);i++) #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define FORD(i,a,b) for(int i=(a);i>=(b);i--) inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; } const int INF = 1<<29; typedef long long ll; inline int two(int n) { return 1 << n; } inline int test(int n, int b) { return (n>>b)&1; } inline void set_bit(int & n, int b) { n |= two(b); } inline void unset_bit(int & n, int b) { n &= ~two(b); } inline int last_bit(int n) { return n & (-n); } inline int ones(int n) { int res = 0; while(n && ++res) n-=n&(-n); return res; } template<class T> void chmax(T & a, const T & b) { a = max(a, b); } template<class T> void chmin(T & a, const T & b) { a = min(a, b); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// const int MAX = 301; int N; map<int, int> num[MAX]; int main() { scanf("%d", &N); REP(i, N) { int M; scanf("%d", &M); REP(j, M) { int x; scanf("%d", &x); ++num[i][x]; } } int Q; scanf("%d", &Q); while (Q--) { int t, k; scanf("%d%d", &t, &k); map<int, int> q; REP(i, k) { int x; scanf("%d", &x); ++q[x]; } int res = 0; REP(i, N) { int cont = 0; for (map<int, int>::iterator iter = q.begin(); iter != q.end(); ++iter) { map<int, int>::iterator iter2 = num[i].find(iter->first); if (iter2 != num[i].end()) cont += min(iter->second, iter2->second); } if (t == 1) { if (cont == k) ++res; } if (t == 2) { if (cont > 0) ++res; } if (t == 3) { if (cont > 0 && cont < k) ++res; } } printf("%d\n", res); } return 0; }