#include <bits/stdc++.h>
using namespace std;
map<pair<string, int>, vector<pair<string, int> > > edg;
queue<string> que;
map<string, int> num, por;
set<string> sett;
int main() {
  int n, i, k, l, r, a, b, j;
  cin >> n;
  string s, t, S;
  for (i = 0; i < n; i++) {
    cin >> s >> a;
    if (!i) {
      que.push(s);
      num[s] = a;
      S = s;
      por[s] = 1;
    }
    cin >> k;
    for (j = 0; j < k; j++) {
      cin >> t >> b;
      edg[{s, a}].push_back({t, b});
    }
  }
  pair<string, int> st;
  while (!que.empty()) {
    sett.insert(que.front());
    st.first = que.front();
    st.second = num[st.first];
    que.pop();
    for (i = 0; i < edg[st].size(); i++) {
      if (!num.count(edg[st][i].first)) {
        num[edg[st][i].first] = edg[st][i].second;
        por[edg[st][i].first] = por[st.first] + 1;
        que.push(edg[st][i].first);
      } else {
        if (por[st.first] + 1 == por[edg[st][i].first] &&
            edg[st][i].second > num[edg[st][i].first]) {
          num[edg[st][i].first] = edg[st][i].second;
        }
      }
    }
  }
  sett.erase(S);
  cout << sett.size() << '\n';
  for (auto j : sett) {
    cout << j << ' ' << num[j] << '\n';
  }
}
