func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   T expo(T e, T n) {     T x = 1, p = e;     while (n) {       if (n & 1) x = x * p;       p = p * p;       n >>= 1;     }     return x;   }   template <typename T>   T power(T e, T n, T m) {     T x = 1, p = e;     while (n) {       if (n & 1) x = (x * p) % m;       p = (p * p) % m;       n >>= 1;     }     return x;   }   template <typename T>   T InverseEuler(T a, T m) {     return (a == 1 ? 1 : power(a, m - 2, m));   }   template <typename T>   T gcd(T a, T b) {     while (a %= b ^= a ^= b ^= a)       ;     return b;   }   template <typename T>   T lcm(T a, T b) {     return (a * (b / gcd(a, b)));   }   template <typename Arg1>   void __f(const char* name, Arg1&& arg1) {     cerr << name <<   :   << arg1 << std::endl;   }   template <typename Arg1, typename... Args>   void __f(const char* names, Arg1&& arg1, Args&&... args) {     const char* comma = strchr(names + 1,  , );     cerr.write(names, comma - names) <<   :   << arg1 <<   |  ;     __f(comma + 1, args...);   }   map<string, long long> M;   map<long long, string> invM;   long long n = 1;   vector<long long> g[5000], temp;   bool vis[5000];   long long in[5000], out[5000];   vector<pair<string, string> > ans;   void dfs(long long node) {     vis[node] = true;     temp.push_back(node);     for (auto it : g[node]) {       if (!vis[it]) {         dfs(it);       }     }     return;   }   int32_t main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     long long q;     cin >> q;     for (__typeof(q) i = 1; i <= q; ++i) {       string s, second;       cin >> s >> second;       if (M.find(s) == M.end()) {         M[s] = n;         invM[n] = s;         n++;       }       if (M.find(second) == M.end()) {         M[second] = n;         invM[n] = second;         n++;       }       g[M[s]].push_back(M[second]);       in[M[second]] += 1;       out[M[s]] += 1;     }     long long components = 0;     for (__typeof(n - 1) i = 1; i <= n - 1; ++i) {       if (!vis[i]) {         components++;         temp.clear();         dfs(i);         string A, B;         for (auto it : temp) {           if (in[it] == 0) A = invM[it];           if (out[it] == 0) B = invM[it];         }         ans.push_back({A, B});       }     }     cout << components <<   n ;     for (auto it : ans) {       cout << it.first <<     << it.second <<   n ;     }     return 0;   }   