#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
long long GCD(long long a, long long b) { return b == 0 ? a : GCD(b, a % b); }
const long long inf = 1e18;
const long long mod = 1e9 + 7;
double pi = acos(-1.0);
int a[2400], num[2400];
string str, s;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  map<string, int> q;
  map<int, string> Q;
  set<int> p;
  int k = 0;
  for (int i = 1; i <= 2300; i++) a[i] = -1, num[i] = -1;
  for (int i = 1; i <= n; i++) {
    cin >> str >> s;
    auto iter = q.find(str);
    if (iter == q.end()) q[str] = ++k, Q[k] = str;
    iter = q.find(s);
    if (iter == q.end()) q[s] = ++k, Q[k] = s;
    a[q[str]] = q[s];
  }
  int ans = 0;
  for (int i = 1; i <= k; i++) {
    auto iter = p.find(i);
    if (iter == p.end()) {
      ans++;
      int index = a[i];
      p.insert(index);
      while (a[index] != -1) {
        p.insert(a[index]);
        index = a[index];
      }
      num[i] = index;
    }
  }
  cout << ans << endl;
  for (int i = 1; i <= 2300; i++)
    if (num[i] != -1) cout << Q[i] << " " << Q[num[i]] << endl;
}
