#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 100000;
const int LOG = 18; // 2^17 = 131072 > 1e5
int n, Q;
int parent[MAXN+1];
vector<int> adj[MAXN+1];
int up[LOG][MAXN+1];
int depth[MAXN+1];
int tin[MAXN+1], tout[MAXN+1], timer=0;
vector<int> byDepth[MAXN+1];
// 1) DFS to flatten each tree, record tin/tout and depth
void dfs(int u, int p){
tin[u] = ++timer;
byDepth[ depth[u] ].push_back(tin[u]);
up[0][u] = p;
for(int v: adj[u]){
if(v==p) continue;
depth[v] = depth[u] + 1;
dfs(v, u);
}
tout[u] = timer;
}
// 2) Jump v up by k steps using binary lifting
int jump(int v, int k){
for(int j=0; j<LOG && v; j++){
if(k & (1<<j)) v = up[j][v];
}
return v;
}
// 3) Count how many values in sorted vector A lie in [L..R]
int countRange(const vector<int>& A, int L, int R){
auto itL = lower_bound(A.begin(), A.end(), L);
auto itR = upper_bound(A.begin(), A.end(), R);
return int(itR - itL);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
// read parent pointers, build forest
for(int i=1;i<=n;i++){
int p;
cin >> p;
parent[i] = p;
if(p!=0){
adj[i].push_back(p);
adj[p].push_back(i);
}
}
// pick up[0] will be filled in dfs
// run DFS from each root
for(int i=1;i<=n;i++){
if(parent[i]==0){
depth[i]=0;
dfs(i, 0);
}
}
// build binary‐lifting table
for(int j=1;j<LOG;j++){
for(int v=1;v<=n;v++){
int w = up[j-1][v];
up[j][v] = w? up[j-1][w] : 0;
}
}
// sort each depth list
int maxDepth = 0;
for(int i=1;i<=n;i++)
if(!byDepth[i].empty())
maxDepth = i;
for(int d=0; d<=maxDepth; d++){
sort(byDepth[d].begin(), byDepth[d].end());
}
// answer queries
cin >> Q;
while(Q--){
int v, p;
cin >> v >> p;
// if v has <p ancestors, none
if(depth[v] < p){
cout << 0 << " ";
continue;
}
// find p-th ancestor
int u = jump(v, p);
// count how many at depth[v] lie in subtree of u
int d = depth[v];
int L = tin[u], R = tout[u];
int total = countRange(byDepth[d], L, R);
// exclude v itself
cout << (total - 1) << " ";
}
cout << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKY29uc3QgaW50IE1BWE4gPSAxMDAwMDA7CmNvbnN0IGludCBMT0cgID0gMTg7ICAvLyAyXjE3ID0gMTMxMDcyID4gMWU1CgppbnQgbiwgUTsKaW50IHBhcmVudFtNQVhOKzFdOwp2ZWN0b3I8aW50PiBhZGpbTUFYTisxXTsKaW50IHVwW0xPR11bTUFYTisxXTsKaW50IGRlcHRoW01BWE4rMV07CmludCB0aW5bTUFYTisxXSwgdG91dFtNQVhOKzFdLCB0aW1lcj0wOwp2ZWN0b3I8aW50PiBieURlcHRoW01BWE4rMV07CgovLyAxKSBERlMgdG8gZmxhdHRlbiBlYWNoIHRyZWUsIHJlY29yZCB0aW4vdG91dCBhbmQgZGVwdGgKdm9pZCBkZnMoaW50IHUsIGludCBwKXsKICAgIHRpblt1XSA9ICsrdGltZXI7CiAgICBieURlcHRoWyBkZXB0aFt1XSBdLnB1c2hfYmFjayh0aW5bdV0pOwogICAgdXBbMF1bdV0gPSBwOwogICAgZm9yKGludCB2OiBhZGpbdV0pewogICAgICAgIGlmKHY9PXApIGNvbnRpbnVlOwogICAgICAgIGRlcHRoW3ZdID0gZGVwdGhbdV0gKyAxOwogICAgICAgIGRmcyh2LCB1KTsKICAgIH0KICAgIHRvdXRbdV0gPSB0aW1lcjsKfQoKLy8gMikgSnVtcCB2IHVwIGJ5IGsgc3RlcHMgdXNpbmcgYmluYXJ5IGxpZnRpbmcKaW50IGp1bXAoaW50IHYsIGludCBrKXsKICAgIGZvcihpbnQgaj0wOyBqPExPRyAmJiB2OyBqKyspewogICAgICAgIGlmKGsgJiAoMTw8aikpIHYgPSB1cFtqXVt2XTsKICAgIH0KICAgIHJldHVybiB2Owp9CgovLyAzKSBDb3VudCBob3cgbWFueSB2YWx1ZXMgaW4gc29ydGVkIHZlY3RvciBBIGxpZSBpbiBbTC4uUl0KaW50IGNvdW50UmFuZ2UoY29uc3QgdmVjdG9yPGludD4mIEEsIGludCBMLCBpbnQgUil7CiAgICBhdXRvIGl0TCA9IGxvd2VyX2JvdW5kKEEuYmVnaW4oKSwgQS5lbmQoKSwgTCk7CiAgICBhdXRvIGl0UiA9IHVwcGVyX2JvdW5kKEEuYmVnaW4oKSwgQS5lbmQoKSwgUik7CiAgICByZXR1cm4gaW50KGl0UiAtIGl0TCk7Cn0KCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGNpbiA+PiBuOwogICAgLy8gcmVhZCBwYXJlbnQgcG9pbnRlcnMsIGJ1aWxkIGZvcmVzdAogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGludCBwOyAKICAgICAgICBjaW4gPj4gcDsKICAgICAgICBwYXJlbnRbaV0gPSBwOwogICAgICAgIGlmKHAhPTApewogICAgICAgICAgICBhZGpbaV0ucHVzaF9iYWNrKHApOwogICAgICAgICAgICBhZGpbcF0ucHVzaF9iYWNrKGkpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBwaWNrIHVwWzBdIHdpbGwgYmUgZmlsbGVkIGluIGRmcwogICAgLy8gcnVuIERGUyBmcm9tIGVhY2ggcm9vdAogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGlmKHBhcmVudFtpXT09MCl7CiAgICAgICAgICAgIGRlcHRoW2ldPTA7CiAgICAgICAgICAgIGRmcyhpLCAwKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gYnVpbGQgYmluYXJ54oCQbGlmdGluZyB0YWJsZQogICAgZm9yKGludCBqPTE7ajxMT0c7aisrKXsKICAgICAgICBmb3IoaW50IHY9MTt2PD1uO3YrKyl7CiAgICAgICAgICAgIGludCB3ID0gdXBbai0xXVt2XTsKICAgICAgICAgICAgdXBbal1bdl0gPSB3PyB1cFtqLTFdW3ddIDogMDsKICAgICAgICB9CiAgICB9CgogICAgLy8gc29ydCBlYWNoIGRlcHRoIGxpc3QKICAgIGludCBtYXhEZXB0aCA9IDA7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgCiAgICAgICAgaWYoIWJ5RGVwdGhbaV0uZW1wdHkoKSkgCiAgICAgICAgICAgIG1heERlcHRoID0gaTsKICAgIGZvcihpbnQgZD0wOyBkPD1tYXhEZXB0aDsgZCsrKXsKICAgICAgICBzb3J0KGJ5RGVwdGhbZF0uYmVnaW4oKSwgYnlEZXB0aFtkXS5lbmQoKSk7CiAgICB9CgogICAgLy8gYW5zd2VyIHF1ZXJpZXMKICAgIGNpbiA+PiBROwogICAgd2hpbGUoUS0tKXsKICAgICAgICBpbnQgdiwgcDsKICAgICAgICBjaW4gPj4gdiA+PiBwOwogICAgICAgIC8vIGlmIHYgaGFzIDxwIGFuY2VzdG9ycywgbm9uZQogICAgICAgIGlmKGRlcHRoW3ZdIDwgcCl7CiAgICAgICAgICAgIGNvdXQgPDwgMCA8PCAiICI7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAvLyBmaW5kIHAtdGggYW5jZXN0b3IKICAgICAgICBpbnQgdSA9IGp1bXAodiwgcCk7CiAgICAgICAgLy8gY291bnQgaG93IG1hbnkgYXQgZGVwdGhbdl0gbGllIGluIHN1YnRyZWUgb2YgdQogICAgICAgIGludCBkID0gZGVwdGhbdl07CiAgICAgICAgaW50IEwgPSB0aW5bdV0sIFIgPSB0b3V0W3VdOwogICAgICAgIGludCB0b3RhbCA9IGNvdW50UmFuZ2UoYnlEZXB0aFtkXSwgTCwgUik7CiAgICAgICAgLy8gZXhjbHVkZSB2IGl0c2VsZgogICAgICAgIGNvdXQgPDwgKHRvdGFsIC0gMSkgPDwgIiAiOwogICAgfQogICAgY291dCA8PCAiXG4iOwogICAgcmV0dXJuIDA7Cn0K