func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:268435456 )   using namespace std;   template <typename T>   T sqr(const T &x) {     return x * x;   }   template <typename T>   T my_abs(const T &x) {     return x < 0 ? -x : x;   }   const int INF = (int)1e9;   const long long LINF = (long long)6e18;   const long long INF64 = LINF;   const long long INFLL = LINF;   const long double EPS = 1e-8;   const long double PI = 3.1415926535897932384626433832795;   const long double ME = 1e-5;   const long long MOD = (int)1e9 + 7;   const long long MOD2 = (int)1e9 + 21;   const int dx[] = {-1, 0, 1, 0};   const int dy[] = {0, 1, 0, -1};   const int SQN = 400;   const int LOGN = 20;   const int N = (int)1e5 + 10;   const int M = (int)1e5 + 10;   map<string, int> hosts;   map<string, int> paths;   map<int, set<int>> nums;   string oh[N];   char buf[100];   pair<vector<int>, int> a[N];   void solve() {     int n;     scanf( %d n , &n);     int idx_host = 0, idx_path = 0;     for (int i = 0; i < int(n); ++i) {       scanf( %s n , buf);       string s = string(buf);       string h =   ;       int cnt = 0;       int pos = 0;       while (pos < int(s.size())) {         if (s[pos] ==  / ) {           cnt++;         }         if (cnt == 3) {           break;         }         h.push_back(s[pos++]);       }       string p =   ;       while (pos < int(s.size())) {         p.push_back(s[pos++]);       }       if (!hosts.count(h)) {         oh[idx_host] = h;         hosts[h] = idx_host++;       }       if (!paths.count(p)) {         paths[p] = idx_path++;       }       nums[hosts[h]].insert(paths[p]);     }     int idx = 0;     for (auto it = nums.begin(); it != nums.end(); ++it) {       a[idx].first.resize(int(it->second.size()));       a[idx].second = it->first;       int pos = 0;       for (auto i = it->second.begin(); i != it->second.end(); ++i) {         a[idx].first[pos++] = *i;       }       idx++;     }     sort(a, a + idx);     vector<vector<int>> ans;     ans.push_back(vector<int>());     for (int i = 1; i < int(idx); ++i) {       bool ok = true;       if (int(a[i].first.size()) != int(a[i - 1].first.size())) {         ok = false;       } else {         for (int j = 0; j < int(int(a[i].first.size())); ++j) {           if (a[i].first[j] != a[i - 1].first[j]) {             ok = false;             break;           }         }       }       if (ok) {         if (int(ans.back().size()) == 0) {           ans.back().push_back(a[i - 1].second);         }         ans.back().push_back(a[i].second);       } else {         if (int(ans.back().size()) != 0) {           ans.push_back(vector<int>());         }       }     }     if (int(ans.back().size()) == 0) {       ans.pop_back();     }     printf( %d n , ans.size());     for (int i = 0; i < int(int(ans.size())); ++i) {       for (int j = 0; j < int(int(ans[i].size())); ++j) {         printf( %s  , oh[ans[i][j]].c_str());       }       printf(  n );     }   }   int main() {     srand((unsigned int)time(NULL));     cout << setprecision(10) << fixed;     solve();     return 0;   }   