#include <bits/stdc++.h>
using namespace std;
bool isvowel(char c) {
  if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') return true;
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  int n, i, j;
  cin >> n;
  map<pair<char, int>, string> ma;
  map<int, string> ma2;
  vector<pair<string, string>> vc;
  vector<pair<string, string>> vs;
  for (i = 0; i < n; i++) {
    string s;
    cin >> s;
    int cn = 0;
    char vo;
    for (j = 0; j < s.length(); j++) {
      if (isvowel(s[j])) {
        vo = s[j];
        cn++;
      }
    }
    if (ma.find({vo, cn}) != ma.end()) {
      vc.push_back(make_pair(s, ma[{vo, cn}]));
      ma.erase({vo, cn});
    } else {
      ma[{vo, cn}] = s;
    }
  }
  for (auto it = ma.begin(); it != ma.end(); it++) {
    if (ma2.find(it->first.second) != ma2.end()) {
      vs.push_back(make_pair(it->second, ma2[it->first.second]));
      ma2.erase(it->first.second);
    } else {
      ma2[it->first.second] = it->second;
    }
  }
  int gro;
  if (vs.size() >= vc.size()) {
    gro = vc.size();
    cout << gro << "\n";
    for (i = 0; i < vc.size(); i++) {
      cout << vs[i].first << " " << vc[i].first << "\n";
      cout << vs[i].second << " " << vc[i].second << "\n";
    }
  } else {
    gro = vs.size() + (vc.size() - vs.size()) / 2;
    cout << gro << "\n";
    for (i = 0; i < vs.size(); i++) {
      cout << vs[i].first << " " << vc[i].first << "\n";
      cout << vs[i].second << " " << vc[i].second << "\n";
    }
    for (; i < vc.size(); i += 2) {
      if (i + 1 < vc.size()) {
        cout << vc[i].first << " " << vc[i + 1].first << "\n";
        cout << vc[i].second << " " << vc[i + 1].second << "\n";
      }
    }
  }
}
