#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
inline T absval(T a) {
  if (a < 0)
    return -a;
  else
    return a;
}
int toInt(string s) {
  istringstream iss(s);
  int res;
  if (!(iss >> res)) res = -1;
  return res;
}
string toString(int a) {
  ostringstream oss;
  oss << a;
  return oss.str();
}
vector<string> getTokens(string s, char delim) {
  vector<string> tokens;
  istringstream iss(s);
  string temp;
  while (getline(iss, temp, delim)) {
    tokens.push_back(temp);
  }
  return tokens;
}
const int MaxMatrixSize = 1000;
template <class T>
inline void printMat(int n, T A[MaxMatrixSize][MaxMatrixSize]) {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) cout << A[i][j] << " ";
    cout << endl;
  }
}
template <class T>
inline void printVec(vector<T> A) {
  for (int i = 0; i < A.size(); i++) {
    cout << A[i] << " ";
  }
}
double dist(double x1, double y1, double x2, double y2) {
  return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}
double distR(double x1, double y1, double x2, double y2) {
  return sqr(x1 - x2) + sqr(y1 - y2);
}
class Compare {
 public:
  bool operator()() { return true; }
};
class Codeforces {
 public:
  void task(vector<pair<string, string> > na) {
    int q = na.size();
    map<string, string> ma;
    vector<pair<string, string> > ans;
    for (int i = (0); i < (q); i++) {
      ma[na[i].first] = na[i].second;
    }
    string k = "";
    for (int i = (0); i < (q); i++) {
      if (ma.find(na[i].first) == ma.end()) continue;
      k = ma[na[i].first];
      while (ma.find(k) != ma.end()) {
        ma[na[i].first] = ma[k];
        ma.erase(k);
        k = ma[na[i].first];
      }
      ans.push_back(make_pair(na[i].first, ma[na[i].first]));
    }
    cout << ans.size() << "\n";
    for (int i = (0); i < (ans.size()); i++) {
      cout << ans[i].first << " " << ans[i].second << "\n";
    }
  }
};
int main() {
  Codeforces cf = Codeforces();
  int q;
  vector<pair<string, string> > na;
  cin >> q;
  na.resize(q);
  for (int i = (0); i < (q); i++) {
    cin >> na[i].first >> na[i].second;
  }
  cf.task(na);
  return 0;
}
