#include<iostream>#include<cmath>#include<cstdio>#include<sstream>#include<cstdlib>#include<string>#include<string.h>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<ctime>#include<bitset>#include<cmath>#define eps 1e-6#define INF 0x3f3f3f3f#define PI acos(-1.0)#define ll __int64#define LL long long#define lson l,m,(rt<<1)#define rson m+1,r,(rt<<1)|1#define M 1000000007using namespace std;#define Maxn 110000vector<int>myv[Maxn];int n,q,num[Maxn];int main(){ while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) { myv[i].clear(); scanf("%d",&num[i]); for(int j=1;j<=num[i];j++) { int a; scanf("%d",&a); myv[i].push_back(a); } sort(myv[i].begin(),myv[i].end()); } scanf("%d",&q); while(q--) { int l,r; scanf("%d%d",&l,&r); if(num[l]>num[r]) swap(l,r); vector<int>::iterator it=myv[l].begin(); int pre=0,ans=0; for(;it!=myv[l].end();it++) { int now=lower_bound(myv[r].begin(),myv[r].end(),*it)-myv[r].begin(); if(now!=pre) { if(it==myv[l].begin()) ans++; else ans+=2; } pre=now; } it--; if(lower_bound(myv[r].begin(),myv[r].end(),*it)-myv[r].begin()!=num[r]) ans++; printf("%dn",ans); } } return 0;}