#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const int LOG = 20;
int n, m;
vector<int> g[N];
int up[N][LOG], depth[N], inT[N], outT[N], timer = 0;
vector<int> depthList[N];
void dfs(int v, int p) {
inT[v] = timer++;
up[v][0] = p;
for (int j = 1; j < LOG; j++) {
if (up[v][j-1]) up[v][j] = up[up[v][j-1]][j-1];
else up[v][j] = 0;
}
depthList[depth[v]].push_back(inT[v]);
for (int to : g[v]) {
depth[to] = depth[v] + 1;
dfs(to, v);
}
outT[v] = timer;
}
int getAncestor(int v, int k) {
for (int j = 0; j < LOG; j++) {
if (k & (1 << j)) {
v = up[v][j];
if (!v) return 0; // ancestor doesn't exist
}
}
return v;
}
int query(int v, int p) {
int z = getAncestor(v, p);
if (!z) return 0; // no such ancestor
auto &vec = depthList[depth[v]];
// count nodes in subtree of z with same depth
int L = lower_bound(vec.begin(), vec.end(), inT[z]) - vec.begin();
int R = lower_bound(vec.begin(), vec.end(), outT[z]) - vec.begin();
return (R - L - 1); // exclude v itself
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
vector<int> parent(n + 1);
for (int i = 1; i <= n; i++) {
cin >> parent[i];
if (parent[i] != 0) {
g[parent[i]].push_back(i);
}
}
// run DFS from all roots
for (int i = 1; i <= n; i++) {
if (parent[i] == 0) {
depth[i] = 0;
dfs(i, 0);
}
}
// sort depth lists for binary search
for (int d = 0; d <= n; d++) {
sort(depthList[d].begin(), depthList[d].end());
}
cin >> m;
vector<int> ans(m);
for (int i = 0; i < m; i++) {
int v, p;
cin >> v >> p;
ans[i] = query(v, p);
}
for (int i = 0; i < m; i++) {
cout << ans[i] << " ";
}
cout << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDEwMDAwNTsKY29uc3QgaW50IExPRyA9IDIwOwoKaW50IG4sIG07CnZlY3RvcjxpbnQ+IGdbTl07CmludCB1cFtOXVtMT0ddLCBkZXB0aFtOXSwgaW5UW05dLCBvdXRUW05dLCB0aW1lciA9IDA7CnZlY3RvcjxpbnQ+IGRlcHRoTGlzdFtOXTsKCnZvaWQgZGZzKGludCB2LCBpbnQgcCkgewogICAgaW5UW3ZdID0gdGltZXIrKzsKICAgIHVwW3ZdWzBdID0gcDsKICAgIGZvciAoaW50IGogPSAxOyBqIDwgTE9HOyBqKyspIHsKICAgICAgICBpZiAodXBbdl1bai0xXSkgdXBbdl1bal0gPSB1cFt1cFt2XVtqLTFdXVtqLTFdOwogICAgICAgIGVsc2UgdXBbdl1bal0gPSAwOwogICAgfQoKICAgIGRlcHRoTGlzdFtkZXB0aFt2XV0ucHVzaF9iYWNrKGluVFt2XSk7CgogICAgZm9yIChpbnQgdG8gOiBnW3ZdKSB7CiAgICAgICAgZGVwdGhbdG9dID0gZGVwdGhbdl0gKyAxOwogICAgICAgIGRmcyh0bywgdik7CiAgICB9CgogICAgb3V0VFt2XSA9IHRpbWVyOwp9CgppbnQgZ2V0QW5jZXN0b3IoaW50IHYsIGludCBrKSB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IExPRzsgaisrKSB7CiAgICAgICAgaWYgKGsgJiAoMSA8PCBqKSkgewogICAgICAgICAgICB2ID0gdXBbdl1bal07CiAgICAgICAgICAgIGlmICghdikgcmV0dXJuIDA7IC8vIGFuY2VzdG9yIGRvZXNuJ3QgZXhpc3QKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdjsKfQoKaW50IHF1ZXJ5KGludCB2LCBpbnQgcCkgewogICAgaW50IHogPSBnZXRBbmNlc3Rvcih2LCBwKTsKICAgIGlmICgheikgcmV0dXJuIDA7IC8vIG5vIHN1Y2ggYW5jZXN0b3IKCiAgICBhdXRvICZ2ZWMgPSBkZXB0aExpc3RbZGVwdGhbdl1dOwogICAgLy8gY291bnQgbm9kZXMgaW4gc3VidHJlZSBvZiB6IHdpdGggc2FtZSBkZXB0aAogICAgaW50IEwgPSBsb3dlcl9ib3VuZCh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLCBpblRbel0pIC0gdmVjLmJlZ2luKCk7CiAgICBpbnQgUiA9IGxvd2VyX2JvdW5kKHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksIG91dFRbel0pIC0gdmVjLmJlZ2luKCk7CiAgICByZXR1cm4gKFIgLSBMIC0gMSk7IC8vIGV4Y2x1ZGUgdiBpdHNlbGYKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGNpbiA+PiBuOwogICAgdmVjdG9yPGludD4gcGFyZW50KG4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGNpbiA+PiBwYXJlbnRbaV07CiAgICAgICAgaWYgKHBhcmVudFtpXSAhPSAwKSB7CiAgICAgICAgICAgIGdbcGFyZW50W2ldXS5wdXNoX2JhY2soaSk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIHJ1biBERlMgZnJvbSBhbGwgcm9vdHMKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGlmIChwYXJlbnRbaV0gPT0gMCkgewogICAgICAgICAgICBkZXB0aFtpXSA9IDA7CiAgICAgICAgICAgIGRmcyhpLCAwKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gc29ydCBkZXB0aCBsaXN0cyBmb3IgYmluYXJ5IHNlYXJjaAogICAgZm9yIChpbnQgZCA9IDA7IGQgPD0gbjsgZCsrKSB7CiAgICAgICAgc29ydChkZXB0aExpc3RbZF0uYmVnaW4oKSwgZGVwdGhMaXN0W2RdLmVuZCgpKTsKICAgIH0KCiAgICBjaW4gPj4gbTsKICAgIHZlY3RvcjxpbnQ+IGFucyhtKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgaW50IHYsIHA7CiAgICAgICAgY2luID4+IHYgPj4gcDsKICAgICAgICBhbnNbaV0gPSBxdWVyeSh2LCBwKTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgIGNvdXQgPDwgYW5zW2ldIDw8ICIgIjsKICAgIH0KICAgIGNvdXQgPDwgIlxuIjsKCiAgICByZXR1cm4gMDsKfQo=