#include <bits/stdc++.h>
using namespace std;
const int Nmax = 100003;
vector<pair<int, int> > k1, k2;
int n, sl[Nmax], id[Nmax];
char en[Nmax];
string a[Nmax];
bool kt(char u) {
  return (u == 'a' || u == 'e' || u == 'o' || u == 'i' || u == 'u');
}
bool ss(const int &u, const int &v) {
  return (sl[u] != sl[v] ? sl[u] < sl[v] : en[u] < en[v]);
}
bitset<Nmax> f;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    cin >> a[i], id[i] = i;
    for (int j = 0, jj = a[i].size(); j < jj; ++j)
      if (kt(a[i][j])) ++sl[i], en[i] = a[i][j];
  }
  sort(id + 1, id + 1 + n, ss);
  for (int i = 1; i < n; ++i)
    if (!f[i]) {
      if (sl[id[i]] != sl[id[i + 1]]) continue;
      if (en[id[i]] == en[id[i + 1]])
        f[i] = f[i + 1] = 1, k2.push_back(pair<int, int>(id[i], id[i + 1]));
    }
  for (int i = 1, j = 1; j <= n; ++i, ++j) {
    while (f[i] && i <= n) ++i;
    if (j <= i) j = i + 1;
    while (f[j] && j <= n) ++j;
    if (i > n || j > n) break;
    if (sl[id[i]] != sl[id[j]]) continue;
    k1.push_back(pair<int, int>(id[i], id[j])), f[i] = f[j] = 1;
  }
  if (k1.size() > k2.size())
    printf("%d\n", k2.size());
  else
    printf("%d\n", (k1.size() + k2.size()) / 2);
  while (!k1.empty() && !k2.empty()) {
    cout << a[k1.back().first] << ' ' << a[k2.back().first] << endl,
        cout << a[k1.back().second] << ' ' << a[k2.back().second] << endl,
        k1.pop_back(), k2.pop_back();
  }
  pair<int, int> u, v;
  while (k2.size() > 1) {
    u = k2.back(), k2.pop_back(), v = k2.back(), k2.pop_back();
    cout << a[u.first] << ' ' << a[v.first] << endl,
        cout << a[u.second] << ' ' << a[v.second] << endl;
  }
}
