#include<bits/stdc++.h>
using namespace std;
const int N=500005;
vector<int>vec[N];
int f[N*2][21],mem[N*2][21],depth[N*2],first[N],vis[N*2],lg[N];
int cnt=0,n,m;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void dfs(int now,int dep)
{
if(!first[now])
first[now]=++cnt;
depth[cnt]=dep,vis[cnt]=now;
for(int i=0;i<vec[now].size();i++)
{
if(first[vec[now][i]])
continue;
else
dfs(vec[now][i],dep+1);
++cnt;
depth[cnt]=dep,vis[cnt]=now;
}
}
void ST()
{
for(int i=1;i<=cnt;i++)
{
lg[i]=lg[i-1]+((1<<lg[i-1])==i);
f[i][0]=depth[i];
mem[i][0]=vis[i];
}
for(int j=1;(1<<j)<=cnt;j++)
for(int i=1;i+(1<<j)-1<=cnt;i++)
{
if(f[i][j-1]<f[i+(1<<(j-1))][j-1])
{
f[i][j]=f[i][j-1];
mem[i][j]=mem[i][j-1];
}
else
{
f[i][j]=f[i+(1<<(j-1))][j-1];
mem[i][j]=mem[i+(1<<(j-1))][j-1];
}
}
}
int LCA(int x,int y)
{
int l=first[x],r=first[y];
if(l>r)
swap(l,r);
int k=lg[r-l+1]-1;
if(f[l][k]<f[r-(1<<k)+1][k])
return mem[l][k];
else
return mem[r-(1<<k)+1][k];
}
int main()
{
n=read();
for(int i=1;i<n;i++)
{
int a;
a=read();
vec[a].push_back(i);
vec[i].push_back(a);
}
dfs(0,0);
ST();
int q=read();
while(q--){
int p,p1;
cin>>m>>p;
for(int i=2;i<=m;++i){
cin>>p1;
p=LCA(p,p1);
}
int ans=p;
while(p){
ans=max(ans,f[p][0]);
p=f[p][0];
}
cout<<ans<<'\n';
}
return 0;
}