#include <bits/stdc++.h>
using namespace std;
int a[1005];
int parent[1005];
int size[1005];
int root(int x) {
  while (x != parent[x]) {
    parent[x] = parent[parent[x]];
    x = parent[x];
  }
  return x;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int q;
  cin >> q;
  map<string, int> mp;
  map<int, string> rev_mp;
  vector<pair<int, int>> vp;
  int value = 1;
  for (int j = 0; j < q; j++) {
    string s1, s2;
    cin >> s1 >> s2;
    int A, B;
    if (mp[s1] == 0) {
      mp[s1] = value;
      A = value;
      value++;
    } else
      A = mp[s1];
    if (mp[s2] == 0) {
      mp[s2] = value;
      B = value;
      value++;
    } else
      B = mp[s2];
    rev_mp[A] = s1;
    rev_mp[B] = s2;
    vp.emplace_back(make_pair(A, B));
  }
  int n = (int)mp.size();
  for (int i = 1; i <= n; i++) parent[i] = i;
  for (int i = 0; i < (int)vp.size(); i++) {
    int A = vp[i].first;
    int B = vp[i].second;
    int root_A = root(A);
    int root_B = root(B);
    if (root_A == A && root_B == B) {
      parent[B] = A;
    } else if (root_A != A && root_B == B) {
      parent[B] = root_A;
      parent[A] = -1;
    }
  }
  int count = 0;
  vector<pair<string, string>> ans;
  for (int i = 1; i <= n; i++) {
    if (parent[i] != -1 && parent[i] != i) {
      count++;
      string first = rev_mp[parent[i]];
      string second = rev_mp[i];
      ans.emplace_back(make_pair(first, second));
    }
  }
  cout << count << "\n";
  for (int i = 0; i < (int)ans.size(); i++)
    cout << ans[i].first << " " << ans[i].second << "\n";
}
