//by azidoazideazide(c2n14)
#include<iostream>
#include<vector>
using namespace std;
using ll=long long;
#define pb push_back

vector<int> adj[100005];
int n,dep[100005], lomo[100005], dp[100005][20];
const int M=17;

void init(){
	for(int i=0;i<n;i++){
		dp[i][0]=lomo[i];
		for(int j=1;j<=M;j++){
			if(dp[i][j-1]==-1) dp[i][j]=-1;
			else dp[i][j]=dp[dp[i][j-1]][j-1];
		}
	}
}

int lca(int a, int b){
	if(dep[a]>dep[b]) swap(a,b);
	for(int j=M-1;j>=0;j--)
		if(dp[b][j]!=-1 && dep[dp[b][j]]>=dep[a]) 
			b=dp[b][j];
	
	if(a==b) return a;
	
	for(int j=M-1;j>=0;j--)
		if(dp[a][j]!=dp[b][j])
			a=dp[a][j], b=dp[b][j];

	return lomo[a];
}

int main(){
	int q;
	cin>>n;
	for(int i=0,k;i<n;i++){
		cin>>k;
		for(int j=0,tt;j<k;j++){
			cin>>tt;
			lomo[tt]=i, dep[tt]=dep[i]+1;
			adj[i].pb(tt);
		}
	}
	
	init();
	
	cin>>q;
	while(q--){
		int a,b;
		cin>>a>>b;
		cout<<lca(a,b)<<endl;
	}
}
