/******************************************
* AUTHOR : RAJAGOPALAN *
* NICK : ARNO *
* INSTITUTION : VIT *
******************************************/
#include <bits/stdc++.h>
#include <ext/pb_ds/detail/standard_policies.hpp>

#define ll long long
#define ull unsigned long long
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define alli(a, n, k) (a + k), (a + n + k)
#define FP(i, a, b, k) for (__typeof(a) i = a; i < b; i += k)
#define FS(i, a, b, k) for (__typeof(a) i = a; i > b; i -= k)
#define IT(it, a) for (__typeof(a.begin()) it = a.begin(); it != a.end(); ++it)
#define eps 1e-6
#define pi 3.141592653589793
using namespace std;
using namespace __gnu_pbds;

template <class T>
inline T gcd(T x, T y)
{
	if (!y)
		return x;
	return gcd(y, x % y);
}
typedef vector<int> VII;
typedef vector<ll> VLL;
typedef pair<int, int> PII;
typedef vector<pair<int, int>> VPII;
typedef vector<pair<int, PII>> VPPI;
const int MOD = 1e9 + 7;
const int INF = 1e9;

inline ll modulo(ll a, ll m)
{
	return (a % m + m) % m;
}

inline ll modInverse(ll a, ll m)
{
	assert(__gcd(a, m) == 1);
	ll m0 = m;
	ll y = 0, x = 1;

	if (m == 1)
		return 0;

	while (a > 1)
	{
		ll q = a / m;
		ll t = m;

		m = a % m, a = t;
		t = y;

		y = x - q * y;
		x = t;
	}

	if (x < 0)
		x += m0;

	return x;
}

inline ll modPow(ll x, ll y, ll m)
{ //x^y % m
	if (y == 0)
		return 1LL;
	else if (y == 1)
		return x;
	else
	{
		ll ans = modPow(x, y / 2, m) % m;
		if (y & 1)
		{
			return (((ans * ans) % m) * x) % m;
		}
		else
		{
			return (ans * ans) % m;
		}
	}
}
vector<VII> adj(10001);
vector<bool> vis(10001);
vector<int> depth(10001);
unordered_map<int,bool> nR;
int D,n;
void bfs(int r,vector<VII>& par)
{
	queue<int> q;
	q.push(r);
	depth[r]=0;
	vis[r]=true;
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		for(auto it:adj[u])
		if(!vis[it])
		{
			vis[it]=true;
			q.push(it);
			depth[it]=depth[u]+1;
			par[0][it]=u;
		}
	}
	//cout<<"HERE"<<endl;
}
int walk(int i,int k,vector<VII>& par)
{
	for(int d=0;d<=D && i!=-1;++d)
	if((1<<d) && k)i=par[d][i];

	return i;
}
int LCA(int u,int v,vector<VII>& par)
{
	if(depth[u]>depth[v])
	u=walk(u,depth[u]-depth[v],par);
	else if(depth[u]<depth[v])
	v=walk(v,depth[v]-depth[u],par);

	if(u==v)
	return u;

	for(int d=D;d>=0;--d)
	{
		if(par[d][u]!=par[d][v])
		{
			u=par[d][u];
			v=par[d][v];
		}
	}
	return par[0][u];
}
int main(int argc, char *argv[])
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	int t;
	cin>>t;
	for(int i=1;i<=t;++i)
	{
		cin>>n;
		nR.clear();
		for(int i=0;i<n;++i)
		{
			adj[i].clear();
			depth[i]=0;
			vis[i]=false;
		}
		for(int i=1;i<=n;++i)
		{
			int sz;
			cin>>sz;
			int sx;
			for(int j=0;j<sz;++j)
			{
				cin>>sx;
				adj[i-1].pb(sx-1);
				nR[sx-1]=true;
				//adj[sx-1].pb(i-1);
			}
		}
		int root;
		for(int i=0;i<n;++i)
		if(!nR[i]){
			root=i;
		}
		//cout<<"HERE"<<endl;
		D=log2(n);
		vector<VII> par(D+1,VII(n,-1));
		bfs(root,par);
		//cout<<"HERE1"<<endl;
		for(int i=0;i<n;++i)
		{
			for(int d=1;d<=D;++d)
			{
				int mid=par[d-1][i];
				if(mid!=-1)
				par[d][i]=par[d-1][mid];
			}
		}
		//cout<<"HERE2"<<endl;

		int q;
		cin>>q;
		cout<<"Case "<<t<<":\n";
		while(q--)
		{
			int x,y;
			cin>>x>>y;
			cout<<1+LCA(x-1,y-1,par)<<endl;
		}
	}
	return 0;
}