#include <bits/stdc++.h>
using namespace std;
const int md = 998244353;
const int mx = 1e5 + 10;
string s[mx];
char c[mx * 10];
pair<int, int> ret[mx], q[mx];
pair<pair<int, int>, pair<int, int> > a[mx];
int siz, tot;
int cnt[mx * 10][8], is, cp[mx * 10];
int check(char ch) {
  if (ch == 'a') return 1;
  if (ch == 'e') return 2;
  if (ch == 'i') return 3;
  if (ch == 'o') return 4;
  if (ch == 'u') return 5;
  return 0;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    cin >> s[i];
    int d = 0;
    for (int j = 0; j < s[i].size(); j++)
      if (check(s[i][j])) c[d++] = s[i][j];
    c[d] = 0;
    if (!d) {
      if (cnt[d][0]) {
        q[tot++] = pair<int, int>(i, cnt[d][0]);
        cnt[d][0] = 0;
      } else
        cnt[d][0] = i;
    } else {
      int id = check(c[d - 1]);
      if (cnt[d][id]) {
        ret[is++] = pair<int, int>(i, cnt[d][id]);
        cnt[d][id] = 0;
      } else
        cnt[d][id] = i;
    }
  }
  for (int i = 1; i < mx * 10; i++) {
    for (int j = 1; j < 6; j++)
      if (cnt[i][j]) {
        if (cp[i]) {
          q[tot++] = pair<int, int>(cnt[i][j], cp[i]);
          cp[i] = 0;
        } else
          cp[i] = cnt[i][j];
      }
  }
  int l = 0, r = 0, ans = 0;
  while (l < is) {
    if (r != tot) {
      a[siz++] = {q[r], ret[l]};
      r++;
    } else {
      if (l + 1 == is) break;
      a[siz++] = {ret[l], ret[l + 1]};
      l++;
    }
    l++;
  }
  printf("%d\n", siz);
  for (int i = 0; i < siz; i++) {
    pair<int, int> u = a[i].first;
    pair<int, int> v = a[i].second;
    cout << s[u.first] << " " << s[v.first] << endl;
    cout << s[u.second] << " " << s[v.second] << endl;
  }
  return 0;
}
