#include <bits/stdc++.h>
using namespace std;
int const N = 100001;
int n, q, h[N], en[N], ex[N], cm, fm[N], pa[N][18], lg[N], mxl;
vector<vector<pair<int, int> > > x;
vector<int> tr[N], f;
int t = 0;
void pl(int v, int p = 0, int hi = 0) {
  en[v] = ++t;
  h[v] = hi;
  fm[v] = cm;
  pa[v][0] = p;
  for (int i = 1; i < mxl; ++i)
    if (pa[v][i - 1])
      pa[v][i] = pa[pa[v][i - 1]][i - 1];
    else
      break;
  x[cm].push_back(make_pair(h[v], en[v]));
  for (int i = 0; i < tr[v].size(); ++i)
    if (tr[v][i] != p) pl(tr[v][i], v, hi + 1);
  ex[v] = t + 1;
}
int main() {
  scanf("%d", &n);
  int z = 0, r = 2;
  for (int i = 0; i < n; ++i) {
    int t;
    scanf("%d", &t);
    if (t)
      tr[t].push_back(i + 1);
    else
      f.push_back(i + 1);
    if (i + 1 == r) r <<= 1, ++z;
    lg[i + 1] = z;
  }
  mxl = lg[n] + 1;
  for (int i = 0; i < f.size(); ++i) {
    x.resize(i + 1);
    pl(f[i]);
    sort(x[cm].begin(), x[cm].end());
    ++cm;
  }
  scanf("%d", &q);
  while (q--) {
    int v, l;
    scanf("%d%d", &v, &l);
    if (h[v] < l)
      printf("0 ");
    else {
      int t = h[v];
      while (l) {
        v = pa[v][lg[l]];
        l -= 1 << lg[l];
      }
      int an =
          lower_bound(x[fm[v]].begin(), x[fm[v]].end(), make_pair(t, ex[v])) -
          lower_bound(x[fm[v]].begin(), x[fm[v]].end(), make_pair(t, en[v]));
      printf("%d ", an - 1);
    }
  }
}
