#include <iostream>
#include <vector>
#include<unordered_map>
#include <string>
using namespace std;
#include<algorithm>
#include<set>
#define Fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define ll long long
vector<pair<string, string>>ans;
unordered_map<string, string>mp;
set<string>st;
string find1(string second) {
string name = second;
auto it = mp.find(second);
if (it != mp.end()) {
name = find1(it->second);
}
return name;
}
void sol() {
int n; cin >> n;
while (n--) {
string old, newname; cin >> old >> newname; mp.insert({ old,newname });
}
for (auto it : mp) {
if (st.find(it.first) == st.end()) {
ans.push_back({ it.first, find1(it.second) });
}
}
cout << ans.size() << endl;
reverse(ans.begin(), ans.end());
for (auto it : ans) {
cout << it.first << " " << it.second << endl;
}
}
int main() {
Fast
int t = 1;
while (t--) {
sol();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZTx1bm9yZGVyZWRfbWFwPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPHNldD4KCiNkZWZpbmUgRmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKCgp2ZWN0b3I8cGFpcjxzdHJpbmcsIHN0cmluZz4+YW5zOwoKdW5vcmRlcmVkX21hcDxzdHJpbmcsIHN0cmluZz5tcDsKc2V0PHN0cmluZz5zdDsKc3RyaW5nIGZpbmQxKHN0cmluZyBzZWNvbmQpIHsKICAgIHN0cmluZyBuYW1lID0gc2Vjb25kOwogICAgCiAgICBhdXRvIGl0ID0gbXAuZmluZChzZWNvbmQpOwogICAgaWYgKGl0ICE9IG1wLmVuZCgpKSB7CiAgICAgICAKICAgICAgICBuYW1lID0gZmluZDEoaXQtPnNlY29uZCk7CiAgICAgICAgCiAgICB9CiAgICByZXR1cm4gbmFtZTsKfQp2b2lkIHNvbCgpIHsKCiAgICBpbnQgbjsgY2luID4+IG47CiAgICAKICAgIHdoaWxlIChuLS0pIHsKICAgICAgICBzdHJpbmcgb2xkLCBuZXduYW1lOyBjaW4gPj4gb2xkID4+IG5ld25hbWU7IG1wLmluc2VydCh7IG9sZCxuZXduYW1lIH0pOwogICAgfQogICAgZm9yIChhdXRvIGl0IDogbXApIHsKICAgICAgICBpZiAoc3QuZmluZChpdC5maXJzdCkgPT0gc3QuZW5kKCkpIHsKICAgICAgICAgICAgYW5zLnB1c2hfYmFjayh7IGl0LmZpcnN0LCBmaW5kMShpdC5zZWNvbmQpIH0pOwogICAgICAgICAgIAogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgYW5zLnNpemUoKSA8PCBlbmRsOwogICAgcmV2ZXJzZShhbnMuYmVnaW4oKSwgYW5zLmVuZCgpKTsKICAgIGZvciAoYXV0byBpdCA6IGFucykgewogICAgICAgIGNvdXQgPDwgaXQuZmlyc3QgPDwgIiAiIDw8IGl0LnNlY29uZCA8PCBlbmRsOwogICAgfQogICAKfQoKaW50IG1haW4oKSB7CiAgICBGYXN0CiAgICAgICAgaW50IHQgPSAxOwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbCgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=