#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")
const unsigned long long int mod = 1e9 + 7;
vector<long long int> arr, ans, ans1;
long long int res = 0, total;
long long int fi[(long long int)2e5 + 1];
unordered_map<string, string> s;
unordered_map<string, long long int> f;
string get(string x) {
  while (s[x] != "") {
    f[s[x]] = 1;
    x = s[x];
  }
  return x;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int t;
  t = 1;
  while (t--) {
    long long int q;
    cin >> q;
    vector<pair<string, string> > query;
    while (q--) {
      string str, str1;
      cin >> str >> str1;
      query.push_back({str, str1});
      s[str] = str1;
    }
    vector<pair<string, string> > fans;
    for (long long int i = 0; i < query.size(); i++) {
      if (!f[query[i].first]) {
        string an = get(query[i].first);
        fans.push_back({query[i].first, an});
      }
    }
    cout << fans.size() << '\n';
    for (auto x : fans) cout << x.first << " " << x.second << '\n';
  }
  cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
  return 0;
}
