#include<stdio.h>
#include<vector>
using namespace std;

const int n=100010;

vector<int> graph[n];
int dep[n],p[20][n];

void go(int now) {
	for (int i=0;i< graph[now].size();i++){
		dep[graph[now][i]]=dep[now]+1;
		p[0][graph[now][i]]=now;
		go(graph[now][i]);
	}
	return;
}

int LCA(int l,int r){
	if(dep[l]<dep[r])swap(l,r);
	for(int i=19;i>=0;i--){
		if(dep[p[i][l]]>=dep[r]){
			l=p[i][l];
		}
	}
	 for(int i=19;i>=0;i--){
	 	if(p[i][l]!=p[i][r]){
	 		l=p[i][l];
	 		r=p[i][r];
		 }	
	 }
	if(l!=r)return p[0][l];
	else return l;
	}
	
int main(){
	int n,k,temp,q,l,r;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&k);
		graph[i].resize(k);
		for(int j=0;j<k;j++){
		scanf("%d",&graph[i][j]);
		}
	}
	go(0);
	for(int i=1;i<20;i++){
		for(int j=0;j<n;j++){
			p[i][j]=p[i-1][p[i-1][j]];
		}
	}
	scanf("%d",&q);
	for(int i=0;i<q;i++){
	scanf("%d%d",&l,&r);
	printf("%d\n",LCA(l,r));
	}
}
