#include <iostream>
#include <vector>
#include <utility>

constexpr int MAX_N=(int)1e5,MAX_LOG_N=17;

int n,q;

std::vector<int> G[MAX_N];

int parent[MAX_LOG_N][MAX_N],depth[MAX_N];

void dfs(int v,int p,int d){
	parent[0][v]=p;
	depth[v]=d;
	for(auto& x : G[v]){
		if(x!=p)
			dfs(x,v,d+1);
	}
}

void init(){
	dfs(0,-1,0);

	for(int i=0;i<MAX_LOG_N-1;++i){
		for(int j=0;j<n;++j){
			if(parent[i][j]<0)
				parent[i+1][j]=-1;
			else
				parent[i+1][j]=parent[i][parent[i][j]];
		}
	}	
}

int lca(int u,int v){
	if(depth[u]>depth[v])
		std::swap(u,v);
	for(int i=0;i<MAX_LOG_N;++i){
		if(depth[v]-depth[u]>>i & 1)
			v=parent[i][v];
	}
	if(u==v)
		return u;

	for(int i=MAX_LOG_N-1;i>=0;--i){
		if(parent[i][u]!=parent[i][v]){
			u=parent[i][u];
			v=parent[i][v];
		}
	}
	return parent[0][u];
}

int main() {
	std::cin>>n;
	int m;
	for(int i=0;i<n;++i){
		std::cin>>m;
		int c;
		for(int j=0;j<m;++j){
			std::cin>>c;
			G[i].push_back(c);
		}
	}
	init();
	int q;
	std::cin>>q;
	int u,v;
	for(int i=0;i<q;++i){
		std::cin>>u>>v;
		std::cout<<lca(u,v)<<std::endl;
	}
	return 0;
}