#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;
}