#include <bits/stdc++.h>
using namespace std;
unordered_map<string, int> group;
vector<vector<int> > to_versions(1010);
vector<pair<int, int> > to_gv(1010);
map<pair<int, int>, int> to_vidx;
vector<string> to_name;
bool check(string& s) {
  for (auto& p : s) {
    if (!isalpha(p)) {
      return false;
    }
  }
  return true;
}
int get_v() {
  string s;
  int num, gp;
  while (true) {
    cin >> s;
    if (s.size() && check(s)) {
      break;
    }
  }
  cin >> num;
  if (group.count(s)) {
    gp = group[s];
  } else {
    gp = int(group.size());
    group[s] = gp;
    to_name.push_back(s);
  }
  int v;
  if (to_vidx.count({gp, num})) {
    v = to_vidx[{gp, num}];
  } else {
    v = int(to_vidx.size());
    to_vidx[{gp, num}] = v;
  }
  to_gv[v] = {gp, num};
  to_versions[gp].push_back(num);
  return v;
}
const int INF = 1000000000;
int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  cout.setf(ios_base::fixed);
  cout.precision(28);
  vector<vector<int> > gr(1010);
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    int v = get_v();
    int m;
    cin >> m;
    for (int j = 0; j < m; ++j) {
      int to = get_v();
      gr[v].push_back(to);
    }
  }
  vector<int> dist(1010, INF);
  dist[0] = 0;
  vector<int> q = {0};
  vector<int> next;
  int cur = 0;
  vector<int> ans;
  for (int i = 0; i < q.size(); ++i) {
    int v = q[i];
    ans.push_back(v);
    for (int to : gr[v]) {
      if (dist[to] > dist[v] + 1) {
        dist[to] = dist[v] + 1;
        next.push_back(to);
      }
    }
    if (i == q.size() - 1) {
      q.clear();
      for (int j = 0; j < next.size(); ++j) {
        v = next[j];
        int gp = to_gv[v].first;
        int num = to_gv[v].second;
        int dst = dist[v];
        bool ok = true;
        for (int el : to_versions[gp]) {
          int v1 = to_vidx[{gp, el}];
          if (v1 == v) {
            continue;
          }
          if (dist[v1] < dst) {
            ok = false;
            break;
          }
          if (dist[v1] == dst && el > num) {
            ok = false;
            break;
          }
        }
        if (ok) {
          q.push_back(v);
        }
      }
      next.clear();
      i = -1;
    }
  }
  cout << ans.size() - 1 << endl;
  vector<pair<string, int> > res;
  for (int i = 1; i < ans.size(); ++i) {
    int v = ans[i];
    int gp = to_gv[v].first;
    int num = to_gv[v].second;
    string name = to_name[gp];
    res.emplace_back(name, num);
  }
  sort(res.begin(), res.end());
  for (auto& p : res) {
    cout << p.first << " " << p.second << "\n";
  }
  return 0;
}
