#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
bool vis[N];
int T, n, m, s, x, y, root, dep[N], fa[N][22], lg[N];
vector<int> v[N];
void dfs(int u, int last) {
dep[u] = dep[last] + 1;
fa[u][0] = last;
for (int i = 1; (1 << i) <= dep[u]; i++) {
fa[u][i] = fa[fa[u][i - 1]][i - 1];
}
for (int i = 0; i < v[u].size(); i++) {
if (v[u][i] != last) {
dfs(v[u][i], u);
}
}
return;
}
int LCA(int x, int y) {
if (dep[x] < dep[y]) {
swap(x, y);
}
while (dep[x] != dep[y]) {
x = fa[x][lg[dep[x] - dep[y]] - 1];
}
if (x == y) {
return x;
}
for (int k = lg[dep[x]]; k >= 0; k--) {
if (fa[x][k] != fa[y][k]) {
x = fa[x][k], y = fa[y][k];
}
}
return fa[x][0];
}
inline void init(){
v->clear();
memset(lg,0,sizeof lg);
memset(fa,0,sizeof fa);
memset(vis,0,sizeof vis);
memset(dep,0,sizeof dep);
return;
}
inline void solve() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
lg[i] = lg[i - 1];
if (i == 1 << lg[i - 1]) {
lg[i]++;
}
}
for (int i = 1; i <= n; i++) {
scanf("%d", &m);
for (int j = 1; j <= m; j++) {
scanf("%d", &x);
v[i].push_back(x);
v[x].push_back(i);
vis[x] = true;
}
}
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
root = i;
break;
}
}
dfs(root, root);
scanf("%d", &s);
for (int i = 1; i <= s; i++) {
scanf("%d%d", &x, &y);
printf("%d\n", LCA(x, y));
}
return;
}
signed main() {
scanf("%d", &T);
for (int i = 1; i <= T; i++) {
init();
printf("Case %d:\n", i);
solve();
}
return 0;
}