#include<bits/stdc++.h>
#define PII pair<int,int>
using namespace std;
const int N=2e6+5;
int n,q,ans[N],top,val[N];
int tot,l[N],r[N],siz[N],hs[N],id[N],dep[N];
bool vis[N];
vector <int> g[N];
vector <PII> que[N];
unordered_map <string,int> mp;
set <int> cnt[N];
void dfs(int u,int fa)
{
l[u]=++tot;
dep[u]=dep[fa]+1;
siz[u]=1;
hs[u]=-1;
id[tot]=u;
for(auto v:g[u])
{
if(v==fa) continue;
dfs(v,u);
siz[u]+=siz[v];
if(hs[u]==-1||siz[v]>siz[hs[u]]) hs[u]=v;
}
r[u]=tot;
}
void add(int x)
{
cnt[dep[x]].insert(val[x]);
}
void del()
{
for(int i=1;i<=tot;i++) cnt[i].clear();
}
void dfs(int u,int fa,bool ok)
{
vis[u]=true;
for(auto v:g[u])
{
if(v==fa||hs[u]==v) continue;
dfs(v,u,false);
}
if(hs[u]!=-1)
dfs(hs[u],u,true);
for(auto v:g[u])
{
if(v==fa||hs[u]==v) continue;
for(int w=l[v];w<=r[v];w++)
add(id[w]);
}
add(u);
for(auto [k,idx] :que[u])
ans[idx]=cnt[k+dep[u]].size();
if(!ok)
del();
}
inline int read()
{
int x=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x;
}
signed main()
{
ios::sync_with_stdio(0);
cin>>n;
for(int i=1,u;i<=n;i++)
{
string c;
cin>>c>>u;
if(!mp[c]) mp[c]=++top;
val[i]=mp[c];
if(!u) continue;
g[i].push_back(u);
g[u].push_back(i);
}
for(int i=1;i<=n;i++)
if(!siz[i]) dfs(i,0);
cin>>q;
for(int i=1,u,d;i<=q;i++)
{
cin>>u>>d;
que[u].emplace_back(d,i);
}
for(int i=1;i<=n;i++)
if(!vis[i]) dfs(i,0,false);
for(int i=1;i<=q;i++) cout<<ans[i]<<endl;
return 0;
}