func_code_string: #include <bits/stdc++.h>   using namespace std;   bool vowel(char c) {     return (c ==  a  || c ==  e  || c ==  o  || c ==  i  || c ==  u );   }   int cvowel(string& s) {     int n = 0;     for (char& c : s) {       n += vowel(c);     }     return n;   }   int getlast(string& s) {     for (int i = s.size() - 1;; i--) {       if (vowel(s[i])) {         return s[i];       }     }   }   const int KEK = 1000001;   vector<string> ss[KEK];   vector<pair<char, int>> vv[KEK];   int main() {     ios::sync_with_stdio(0);     int n;     cin >> n;     for (int i = 0; i < n; i++) {       string s;       cin >> s;       int cnt = cvowel(s);       ss[cnt].push_back(s);       vv[cnt].push_back(make_pair(getlast(s), ss[cnt].size() - 1));     }     vector<pair<string, string>> q1, q2;     for (int i = 1; i < KEK; i++) {       sort(vv[i].begin(), vv[i].end());       int m = vv[i].size();       vector<bool> inpair(m, false);       for (int j = 1; j < m; j++) {         if (vv[i][j - 1].first == vv[i][j].first) {           inpair[j - 1] = inpair[j] = true;           q2.push_back(               make_pair(ss[i][vv[i][j - 1].second], ss[i][vv[i][j].second]));           j++;         }       }       int last = -1;       for (int j = 0; j < m; j++) {         if (inpair[j] == false) {           if (last == -1) {             last = j;           } else {             q1.push_back(                 make_pair(ss[i][vv[i][last].second], ss[i][vv[i][j].second]));             last = -1;           }         }       }     }     while (q2.size() > q1.size()) {       q1.push_back(q2.back());       q2.pop_back();     }     while (q1.size() > q2.size()) {       q1.pop_back();     }     cout << q1.size() << endl;     for (int i = 0; i < q1.size(); i++) {       cout << q1[i].first <<     << q2[i].first <<   n ;       cout << q1[i].second <<     << q2[i].second <<   n ;     }   }   