/* AUTHOR: TUAN ANH - BUI */
// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class X, class Y>
bool minimize(X &x, const Y &y) {
if (x > y) return x = y, true;
return false;
}
template<class X, class Y>
bool maximize(X &x, const Y &y) {
if (x < y) return x = y, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "icebear"
/*END OF TEMPLATE. ICEBEAR AND THE CAT WILL WIN TST26 */
const int MOD = 1e9 + 7;
const int inf = (int)1e9 + 27092008;
const ll INF = (ll)1e18 + 27092008;
const int N = 5e5 + 5;
int n, q, p[N];
vector<int> G[N];
int sz[N], tin[N], ans[N], tout[N], tour[N], timer = 0, h[N];
vector<ii> Q[N];
string s[N];
map<string, int> cnt[N];
void dfs(int u) {
tin[u] = ++timer;
tour[timer] = u;
sz[u] = 1;
for(int v: G[u]) {
h[v] = h[u] + 1;
dfs(v);
sz[u] += sz[v];
}
tout[u] = timer;
}
void sack(int u, bool keep = false) {
int hvy = 0;
for(int v : G[u]) if (sz[v] > sz[hvy])
hvy = v;
for(int v : G[u]) if (v != hvy)
sack(v, false);
if (hvy > 0) sack(hvy, true);
for(int v : G[u]) if (v != hvy) {
FOR(i, tin[v], tout[v]) {
int x = tour[i];
cnt[h[x]][s[x]]++;
}
}
cnt[h[u]][s[u]]++;
for(ii x : Q[u]) {
int k, i; tie(k, i) = x;
if (k + h[u] <= n) ans[i] = cnt[k + h[u]].size();
}
if (keep == false) {
FOR(i, tin[u], tout[u]) {
int x = tour[i];
cnt[h[x]].clear();
}
}
}
void init(void) {
cin >> n;
FOR(i, 1, n) {
cin >> s[i] >> p[i];
if (!p[i]) continue;
G[p[i]].pb(i);
}
cin >> q;
FOR(i, 1, q) {
int v, k;
cin >> v >> k;
Q[v].pb(mp(k, i));
}
}
void process(void) {
FOR(i, 1, n) if (p[i] == 0) {
dfs(i);
sack(i);
}
FOR(i, 1, q) cout << ans[i] << ' ';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
LyogQVVUSE9SOiBUVUFOIEFOSCAtIEJVSSAqLwovLyB+fiBpY2ViZWFyIH5+CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gaWk7CnR5cGVkZWYgcGFpcjxpbnQsIGlpPiBpaWk7Cgp0ZW1wbGF0ZTxjbGFzcyBYLCBjbGFzcyBZPgogICAgYm9vbCBtaW5pbWl6ZShYICZ4LCBjb25zdCBZICZ5KSB7CiAgICAgICAgaWYgKHggPiB5KSByZXR1cm4geCA9IHksIHRydWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKdGVtcGxhdGU8Y2xhc3MgWCwgY2xhc3MgWT4KICAgIGJvb2wgbWF4aW1pemUoWCAmeCwgY29uc3QgWSAmeSkgewogICAgICAgIGlmICh4IDwgeSkgcmV0dXJuIHggPSB5LCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9KGEpOyBpPD0oYik7ICsraSkKI2RlZmluZSBGT1JSKGksYSxiKSBmb3IoaW50IGk9KGEpOyBpPj0oYik7IC0taSkKI2RlZmluZSBSRVAoaSwgbikgZm9yKGludCBpPTA7IGk8KG4pOyArK2kpCiNkZWZpbmUgUkVEKGksIG4pIGZvcihpbnQgaT0obiktMTsgaT49MDsgLS1pKQojZGVmaW5lIE1BU0soaSkgKDFMTCA8PCAoaSkpCiNkZWZpbmUgQklUKFMsIGkpICgoKFMpID4+IChpKSkgJiAxKQojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIHRhc2sgImljZWJlYXIiCi8qRU5EIE9GIFRFTVBMQVRFLiBJQ0VCRUFSIEFORCBUSEUgQ0FUIFdJTEwgV0lOIFRTVDI2ICovCgpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IGluZiA9IChpbnQpMWU5ICsgMjcwOTIwMDg7CmNvbnN0IGxsIElORiAgPSAobGwpMWUxOCArIDI3MDkyMDA4Owpjb25zdCBpbnQgTiA9IDVlNSArIDU7CmludCBuLCBxLCBwW05dOwp2ZWN0b3I8aW50PiBHW05dOwppbnQgc3pbTl0sIHRpbltOXSwgYW5zW05dLCB0b3V0W05dLCB0b3VyW05dLCB0aW1lciA9IDAsIGhbTl07CnZlY3RvcjxpaT4gUVtOXTsKc3RyaW5nIHNbTl07Cm1hcDxzdHJpbmcsIGludD4gY250W05dOwoKdm9pZCBkZnMoaW50IHUpIHsKICAgIHRpblt1XSA9ICsrdGltZXI7CiAgICB0b3VyW3RpbWVyXSA9IHU7CiAgICBzelt1XSA9IDE7CiAgICBmb3IoaW50IHY6IEdbdV0pIHsKICAgICAgICBoW3ZdID0gaFt1XSArIDE7CiAgICAgICAgZGZzKHYpOwogICAgICAgIHN6W3VdICs9IHN6W3ZdOwogICAgfQogICAgdG91dFt1XSA9IHRpbWVyOwp9Cgp2b2lkIHNhY2soaW50IHUsIGJvb2wga2VlcCA9IGZhbHNlKSB7CiAgICBpbnQgaHZ5ID0gMDsKICAgIGZvcihpbnQgdiA6IEdbdV0pIGlmIChzelt2XSA+IHN6W2h2eV0pCiAgICAgICAgaHZ5ID0gdjsKCiAgICBmb3IoaW50IHYgOiBHW3VdKSBpZiAodiAhPSBodnkpCiAgICAgICAgc2Fjayh2LCBmYWxzZSk7CgogICAgaWYgKGh2eSA+IDApIHNhY2soaHZ5LCB0cnVlKTsKCiAgICBmb3IoaW50IHYgOiBHW3VdKSBpZiAodiAhPSBodnkpIHsKICAgICAgICBGT1IoaSwgdGluW3ZdLCB0b3V0W3ZdKSB7CiAgICAgICAgICAgIGludCB4ID0gdG91cltpXTsKICAgICAgICAgICAgY250W2hbeF1dW3NbeF1dKys7CiAgICAgICAgfQogICAgfQoKICAgIGNudFtoW3VdXVtzW3VdXSsrOwogICAgZm9yKGlpIHggOiBRW3VdKSB7CiAgICAgICAgaW50IGssIGk7IHRpZShrLCBpKSA9IHg7CiAgICAgICAgaWYgKGsgKyBoW3VdIDw9IG4pIGFuc1tpXSA9IGNudFtrICsgaFt1XV0uc2l6ZSgpOwogICAgfQoKICAgIGlmIChrZWVwID09IGZhbHNlKSB7CiAgICAgICAgRk9SKGksIHRpblt1XSwgdG91dFt1XSkgewogICAgICAgICAgICBpbnQgeCA9IHRvdXJbaV07CiAgICAgICAgICAgIGNudFtoW3hdXS5jbGVhcigpOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBpbml0KHZvaWQpIHsKICAgIGNpbiA+PiBuOwogICAgRk9SKGksIDEsIG4pIHsKICAgICAgICBjaW4gPj4gc1tpXSA+PiBwW2ldOwogICAgICAgIGlmICghcFtpXSkgY29udGludWU7CiAgICAgICAgR1twW2ldXS5wYihpKTsKICAgIH0KICAgIGNpbiA+PiBxOwogICAgRk9SKGksIDEsIHEpIHsKICAgICAgICBpbnQgdiwgazsKICAgICAgICBjaW4gPj4gdiA+PiBrOwogICAgICAgIFFbdl0ucGIobXAoaywgaSkpOwogICAgfQp9Cgp2b2lkIHByb2Nlc3Modm9pZCkgewogICAgRk9SKGksIDEsIG4pIGlmIChwW2ldID09IDApIHsKICAgICAgICBkZnMoaSk7CiAgICAgICAgc2FjayhpKTsKICAgIH0KICAgIEZPUihpLCAxLCBxKSBjb3V0IDw8IGFuc1tpXSA8PCAnICc7Cn0KCgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3Blbih0YXNrIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGludCB0YyA9IDE7Ci8vICAgIGNpbiA+PiB0YzsKICAgIHdoaWxlKHRjLS0pIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgcHJvY2VzcygpOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCg==