#include <bits/stdc++.h>
using namespace std;
int n, x, pr[21][111111], de[111111], t[111111], le[111111], ri[111111], tt, m,
    y;
vector<int> g[111111], v[111111];
void rec(int x, int d) {
  t[x] = ++tt;
  le[x] = tt;
  de[x] = d;
  for (int i = 0; i < v[x].size(); i++) rec(v[x][i], d + 1);
  ri[x] = tt;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> x;
    pr[0][i] = x;
    v[x].push_back(i);
  }
  rec(0, 0);
  for (int i = 1; i < 20; i++)
    for (int j = 0; j <= n; j++)
      if (!pr[i - 1][j])
        pr[i][j] = 0;
      else
        pr[i][j] = pr[i - 1][pr[i - 1][j]];
  for (int i = 0; i <= n; i++) g[de[i]].push_back(t[i]);
  for (int i = 0; i <= n + 2; i++)
    if (g[i].size()) sort(g[i].begin(), g[i].end());
  cin >> m;
  for (int i = 0; i < m; i++) {
    cin >> x >> y;
    if (de[x] <= y) {
      printf("0 ");
      continue;
    }
    int xx = x;
    for (int j = 19; j >= 0; j--)
      if (y & (1ull << (j))) xx = pr[j][xx];
    int ans = upper_bound(g[de[x]].begin(), g[de[x]].end(), ri[xx]) -
              lower_bound(g[de[x]].begin(), g[de[x]].end(), le[xx]);
    printf("%d ", ans - 1);
  }
  return 0;
}
