#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  char ch = getchar();
  bool positive = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') positive = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return positive ? x : -x;
}
inline void write(int a) {
  if (a >= 10) write(a / 10);
  putchar('0' + a % 10);
}
inline void writeln(int a) {
  write(a);
  puts("");
}
int n, ans;
struct data {
  int bo;
  string first;
};
map<string, data> M;
const int N = 1005;
string a[N], b[N], t;
map<string, bool> MM;
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    cin >> a[i] >> b[i];
    if (M[a[i]].bo)
      t = M[a[i]].first;
    else
      t = a[i];
    M[a[i]] = (data){0, a[i]};
    M[b[i]] = (data){1, t};
  }
  for (int i = 1; i <= n; i++) {
    if (MM[b[i]])
      continue;
    else
      MM[b[i]] = 1;
    if (M[b[i]].bo) ans++;
  }
  MM.clear();
  writeln(ans);
  for (int i = 1; i <= n; i++)
    if (M[b[i]].bo && MM[b[i]] == 0) {
      MM[b[i]] = 1;
      cout << M[b[i]].first << " " << b[i] << endl;
    }
}
