//4303. 链表
//链表只保留头和尾
#include <bits/stdc++.h>
using namespace std;
unordered_map<string,string> l,r;
int n,cnt = 0;
int main(){
cin >> n;
string a,b;
while(n--){
cin >> a >> b;
if(l[a] == "\0"){//第一次出现 新链表
r[a] = b;
l[b] = a;
cnt++;
}else{
r[l[a]] = b;
l[b] = l[a];
}
}
cout << cnt << endl;
for(auto [k,v] : r){
cout << k << ' ' << v << endl;
}
return 0;
}