#include<bits/stdc++.h>
#define int long long
using namespace std;
#define N 100005
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-'0';ch=getchar();}
return x*f;
}
void write(int x){
if(x<0){x=-x;putchar(45);}
if(x>9) write(x/10);
putchar(x%10+48);
return;
}
int n, q, fa[N], dp[N][35], dep[N], root, mp[N], ans[N];
long long lst;
vector<int> nbr[N];
unordered_map<string,int> mp2[100005];
unordered_map<int,string> mp1;
struct node
{
int x, y;
};
vector<node> qq[N];
int work(int x, int y)
{
for(int j=0;j<20;j++)
{
if(y>>j&1)
{
x=dp[x][j];
}
}
return x;
}
void pre_lca(int cur)
{
dep[cur]=dep[fa[cur]]+1;
mp[dep[cur]]++;
for(auto ii:qq[cur])
{
ans[ii.y]-=mp[dep[cur]+ii.x];
}
for(int nxt:nbr[cur])
{
if(nxt!=fa[cur])
{
pre_lca(nxt);
}
}
for(auto ii:qq[cur])
{
ans[ii.y]+=mp[dep[cur]+ii.x]-1;
}
return ;
}
struct nnde
{
int x, y;
}qqq[N];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
string str;
cin>>str;
mp1[i]=str;
cin>>fa[i];
nbr[fa[i]].push_back(i);
dp[i][0]=fa[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<20;j++)
{
dp[i][j]=dp[dp[i][j-1]][j-1];
}
}
cin>>q;
for(int qd=1;qd<=q;qd++)
{
int x,y;
cin>>x>>y;
int now=x;
qq[now].emplace_back((node){y,qd});
qqq[qd].x=x,qqq[qd].y=y;
}
for(int i=1;i<=n;i++)
{
if(!fa[i])
{
pre_lca(i);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(dep[j]==i)
{
mp2[i][mp1[j]]++;
}
}
}
for(int qd=1;qd<=q;qd++)
{
int cnt=0;
for(auto i:mp2[dep[qqq[qd].x]+qqq[qd].y])
{
cnt++;
}
cout<<cnt<<"\n";
}
}