#include <bits/stdc++.h>
using namespace std;
set<char> vowels = {'a', 'e', 'i', 'o', 'u'};
bool isVowel(char cc) { return vowels.find(cc) != vowels.end(); }
deque<pair<string, string> > dat, nxt, ans[2];
string tmp;
vector<pair<pair<string, string>, pair<string, string> > > ok;
int main() {
  int N;
  scanf("%d", &N);
  dat.resize(N);
  for (int i = 0; i < N; ++i) {
    cin >> tmp;
    for (char &cc : tmp) {
      if (isVowel(cc)) dat[i].first.push_back(cc);
    }
    dat[i].second = tmp;
    reverse((dat[i].first).begin(), (dat[i].first).end());
  }
  sort((dat).begin(), (dat).end(),
       [](pair<string, string> &A, pair<string, string> &B) {
         if (A.first.size() < B.first.size())
           return true;
         else if (A.first.size() == B.first.size()) {
           return A.first < B.first;
         } else {
           return false;
         }
       });
  while (dat.size() > 1) {
    if (dat[0].first[0] == dat[1].first[0] &&
        dat[0].first.size() == dat[1].first.size()) {
      ans[0].push_back({dat[0].second, dat[1].second});
      dat.pop_front();
      dat.pop_front();
    } else {
      nxt.push_back(dat[0]);
      dat.pop_front();
    }
  }
  while (!dat.empty()) {
    nxt.push_back(dat[0]);
    dat.pop_front();
  }
  while (nxt.size() > 1) {
    if (nxt[0].first.size() == nxt[1].first.size()) {
      ans[1].push_back({nxt[0].second, nxt[1].second});
      nxt.pop_front();
      nxt.pop_front();
    } else {
      nxt.pop_front();
    }
  }
  while (!ans[0].empty() && !ans[1].empty()) {
    ok.push_back({{ans[1][0].first, ans[0][0].first},
                  {ans[1][0].second, ans[0][0].second}});
    ans[0].pop_front();
    ans[1].pop_front();
  }
  while (ans[0].size() > 1) {
    ok.push_back({{ans[0][0].first, ans[0][1].first},
                  {ans[0][0].second, ans[0][1].second}});
    ans[0].pop_front();
    ans[0].pop_front();
  }
  printf("%ld\n", ok.size());
  for (auto &it : ok) {
    cout << it.first.first << ' ' << it.first.second << '\n'
         << it.second.first << ' ' << it.second.second << '\n';
  }
  return 0;
}
