#include <bits/stdc++.h>
using namespace std;
const int inf = (int)1e9;
struct vowels {
  string vow, full;
  vowels() {
    vow = "";
    full = "";
  }
  vowels(string _vow, string _full) {
    vow = _vow;
    full = _full;
  }
};
void str_in(string &s) {
  s = "";
  char c = getchar();
  while (c < 'a' || c > 'z') {
    c = getchar();
  }
  while (c >= 'a' && c <= 'z') {
    s += c;
    c = getchar();
  }
  return;
}
string update(string &s) {
  string _s = "";
  for (char &c : s) {
    if (c == 'a' || c == 'e' || c == 'o' || c == 'i' || c == 'u') {
      _s += c;
    }
  }
  return _s;
}
bool cmp(vowels a, vowels b) {
  if (a.vow.size() != b.vow.size()) {
    if (a.vow.size() < b.vow.size()) {
      return true;
    }
    return false;
  }
  if (a.vow.back() < b.vow.back()) {
    return true;
  }
  return false;
}
void str_out(string a, string b, string c, string d) {
  for (int i = 0; i < (int)a.size(); ++i) {
    printf("%c", a[i]);
  }
  printf(" ");
  for (int i = 0; i < (int)b.size(); ++i) {
    printf("%c", b[i]);
  }
  printf("\n");
  for (int i = 0; i < (int)c.size(); ++i) {
    printf("%c", c[i]);
  }
  printf(" ");
  for (int i = 0; i < (int)d.size(); ++i) {
    printf("%c", d[i]);
  }
  printf("\n");
  return;
}
int main() {
  int n;
  scanf("%d", &n);
  vector<vowels> v;
  for (int i = 0; i < n; ++i) {
    string s;
    str_in(s);
    string _s = update(s);
    v.push_back(vowels(_s, s));
  }
  sort(v.begin(), v.end(), cmp);
  vector<pair<int, int> > last;
  for (int i = 0; i < n - 1; ++i) {
    if (v[i].vow == "#") {
      continue;
    }
    if (v[i].vow.size() == v[i + 1].vow.size()) {
      if (v[i].vow.back() == v[i + 1].vow.back()) {
        last.push_back(make_pair(i, i + 1));
        v[i].vow = "#";
        v[i + 1].vow = "#";
      }
    }
  }
  vector<pair<int, int> > first;
  for (int i = 0; i < n - 1; ++i) {
    if (v[i].vow == "#") {
      continue;
    }
    for (int j = i + 1; j < n; ++j) {
      if (v[j].vow == "#") {
        continue;
      }
      if (v[i].vow.size() == v[j].vow.size()) {
        first.push_back(make_pair(i, j));
        v[i].vow = "#";
        v[j].vow = "#";
        break;
      }
    }
  }
  if (first.size() >= last.size()) {
    printf("%d\n", (int)last.size());
    for (int i = 0; i < (int)last.size(); ++i) {
      str_out(v[first[i].first].full, v[last[i].first].full,
              v[first[i].second].full, v[last[i].second].full);
    }
  } else {
    printf("%d\n",
           (int)first.size() + ((int)last.size() - (int)first.size()) / 2);
    for (int i = 0; i < (int)first.size(); ++i) {
      str_out(v[first[i].first].full, v[last[i].first].full,
              v[first[i].second].full, v[last[i].second].full);
    }
    for (int i = (int)first.size(); i + 1 < (int)last.size(); i += 2) {
      str_out(v[last[i].first].full, v[last[i + 1].first].full,
              v[last[i].second].full, v[last[i + 1].second].full);
    }
  }
  return 0;
}
