#include <bits/stdc++.h>

using namespace std;

const int N = 55;

struct Sw {
  int in;
  int out[2];
  int f;
  void add(int id) {
    if (out[0] == 0) {
      out[0] = id;
    }
    else {
      if (id < out[0]) {
        out[1] = out[0];
        out[0] = id;
      }
      else {
        out[1] = id;
      }
    }
  }
};
int n, m;
Sw sw[N];
int id[256];
vector<pair<int, int> > ans;
vector<pair<int, int> > vtmp;

int dfs(int src, int dep) {
  if (sw[src].in == 0) {
    return dep;
  }
  int t = sw[src].in;
  if (sw[t].out[sw[t].f] == src) {
    return dfs(t, dep + 1);
  }
  else {
    vtmp.push_back(make_pair(dep + 1, t));
    sw[t].f = 1 - sw[t].f;
    return dfs(t, dep + 1);
  }
}

int main() {
  freopen("instruction.in", "r", stdin);
  freopen("instruction.out", "w", stdout);
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    char s[10];
    scanf("%s", s);
    if (s[0] == 's') {
      int tmp;
      scanf("%d", &tmp);
      sw[i].in = tmp;
      sw[tmp].add(i);
    }
    else {
      int tmp;
      char ss[10];
      scanf("%d%s", &tmp, ss);
      sw[i].in = tmp;
      sw[tmp].add(i);
      id[ss[0]] = i;
    }
  }
  scanf("%d", &m);
  for (int i = 0; i < m; ++i) {
    int tmp;
    char s[10];
    scanf("%d %s", &tmp, s);
    int src = id[s[0]];
    vtmp.clear();
    int tot = dfs(src, 0);
/*    for (int i = 0; i < vtmp.size(); ++i) {
      printf("%d,%d ", vtmp[i].first, vtmp[i].second);
    }
    printf("\n");*/
    for (int i = 0; i < vtmp.size(); ++i) {
      ans.push_back(make_pair(tmp + (tot - vtmp[i].first + 1), vtmp[i].second));
    }
  }
  sort(ans.begin(), ans.end());
  printf("%d\n", ans.size());
  for (int i = 0; i < ans.size(); ++i) {
    printf("%d %d\n", ans[i].second, ans[i].first);
  }
  return 0;
}