#include <bits/stdc++.h>
using namespace std;
int cnt,f[50050][21],head[50050],d[50050];
bool vis[50050];
float lg;
struct edge
{
int to;
int nex;
}e[5000100];
inline void add(int a,int b)
{
++cnt;
e[cnt].to=b;
e[cnt].nex=head[a];
head[a]=cnt;
}
inline void dfs(int u,int fa)
{
d[u]=d[fa]+1;
f[u][0]=fa;
for(register int i=1;i<=lg;i++)
f[u][i]=f[f[u][i-1]][i-1];
for(register int i=head[u];i;i=e[i].nex)
{
int v=e[i].to;
if(v!=fa)
dfs(v,u);
}
}
inline int l(int x,int y)
{
if(d[x]>d[y]) swap(x,y);
for(register int i=lg;i>=0;i--)
if(d[x]<=d[y]-(1<<i))
y=f[y][i];
if(x==y)
return x;
for(register int i=lg;i>=0;i--)
{
if(f[x][i]==f[y][i])
continue;
else
{
x=f[x][i];
y=f[y][i];
}
}
return f[x][0];
}
int n,m,s,a,gs,b,c,q,root;
int main()
{
cin>>gs;
for(int zz=1;zz<=gs;zz++)
{
memset(head,0,sizeof(head));
memset(vis,0,sizeof(vis));
cin>>n;
for(int i=1;i<=n;i++)
{
int w;
cin>>w;
for(int j=1;j<=w;j++)
{
cin>>c;
add(i,c),add(c,i);
vis[c]=true;
}
}
for(int i=1;i<=n;i++)
{
if(vis[i]==false)
{
root=i;
break;
}
}
lg=log(n)/log(2);
dfs(root,root);
scanf("%d",&q);
cout<<"case "<<zz<<":"<<endl;
for(int j=1;j<=q;j++)
{
scanf("%d%d",&c,&q);
printf("%d\n",l(c,q));
}
}
return 0;
}