#include <bits/stdc++.h>
using namespace std;
int n,m,q,fa[100010][20],dep[100010],lca,maxn;
int premax[100010];
struct Star {
int head[100010],ntx[100010],vtx[100010],idx;
Star() {
memset(head,-1,sizeof(head));
}
void add(int a,int b) {
ntx[idx] = head[a];
head[a] = idx;
vtx[idx] = b;
++idx;
}
} g;
void DFS(int u,int faNode,int maxn) {
maxn = max(maxn,u), premax[u] = maxn;
fa[u][0] = faNode, dep[u] = dep[faNode] + 1;
for (int i=1; i<=(int)log2(dep[u]); ++i) {
fa[u][i] = fa[fa[u][i-1]][i-1];
}
for (int i=g.head[u]; i!=-1; i=g.ntx[i]) {
int v = g.vtx[i];
if (v != faNode) {
DFS(v,u,maxn);
}
}
}
int LCA(int u,int v) {
if (dep[u] < dep[v]) {
swap(u,v);
}
while (dep[u] > dep[v]) {
u = fa[u][(int)log2(dep[u]-dep[v])];
}
if (u == v) {
return v;
}
for (int i=(int)log2(dep[u]); i>=0; --i) {
if (fa[u][i] != fa[v][i]) {
u = fa[u][i], v = fa[u][i];
}
}
return fa[u][0];
}
int main() {
scanf("%d",&n);
for (int i=1; i<=n-1; ++i) {
int f;
scanf("%d",&f);
if (f != i) {
g.add(f,i);
}
}
DFS(0,0,0);
scanf("%d",&q);
while (q--) {
scanf("%d",&m);
scanf("%d",&lca);
for (int i=2; i<=m; ++i) {
int a;
scanf("%d",&a);
lca = LCA(lca,a);
}
printf("%d\n",premax[lca]);
}
return 0;
}