#include <bits/stdc++.h>
#pragma GCC optimize("O3")
const long long MOD = 1e9 + 7;
using namespace std;
long long n_bits(long long n) {
  long long x = __builtin_popcount(n);
  return x;
}
map<string, string> par;
map<string, long long> sz;
string find(string x) { return x == par[x] ? x : x = find(par[x]); }
void uni(string x, string y) {
  string r1 = find(x);
  string r2 = find(y);
  if (r1 != r2) {
    if (sz[r1] >= sz[r2]) {
      par[y] = x;
      sz[x] += sz[y];
    } else {
      par[x] = y;
      sz[y] += sz[x];
    }
  }
}
int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, pt(0), ct(0), x, y;
  cin >> n;
  string s1, s2;
  vector<string> vv;
  for (long long i = 0; i < n; i++) {
    cin >> s1 >> s2, vv.emplace_back(s1), vv.emplace_back(s2), par[s1] = s1,
                                                               par[s2] = s2;
  }
  for (auto i = vv.begin(); i != vv.end(); i += 2) {
    uni(*i, *(i + 1));
  }
  map<string, long long> check;
  for (auto i : par) {
    if (i.first == i.second) check[i.first] = 0;
    ;
  }
  cout << (long long)check.size() << endl;
  for (auto i = vv.rbegin(); i != vv.rend(); i += 2) {
    string g = find(*(i));
    if (check[g] == 0) {
      cout << g << " " << *i << endl;
      check[g] = 1;
    }
  }
}
