#include <bits/stdc++.h>
using namespace std;
int n;
string in[100005];
struct ha {
  int last, len, id;
} a[1000005];
bool cmp(const ha &aa, const ha &bb) {
  if (aa.len != bb.len) return aa.len < bb.len;
  return aa.last < bb.last;
}
queue<int> lq;
queue<int> nq;
int m;
queue<int> an;
queue<int> lins;
queue<int> linsl;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    cin >> in[i];
    a[i].id = i;
    int l = in[i].size();
    a[i].len = 0;
    for (int j = 0; j < l; j++) {
      if (in[i][j] == 'a' || in[i][j] == 'e' || in[i][j] == 'i' ||
          in[i][j] == 'o' || in[i][j] == 'u') {
        a[i].len++;
        a[i].last = in[i][j] - 'a';
      }
    }
  }
  sort(a + 1, a + 1 + n, cmp);
  for (int i = 1; i <= n; i++) {
    if (a[i].len == a[i + 1].len && a[i].last == a[i + 1].last) {
      lq.push(a[i].id);
      lq.push(a[i + 1].id);
      i++;
      continue;
    }
    lins.push(a[i].id);
    linsl.push(a[i].len);
  }
  while (!lins.empty()) {
    int nq1 = lins.front();
    lins.pop();
    int L1 = linsl.front();
    linsl.pop();
    if (lins.empty()) break;
    int nq2 = lins.front();
    int L2 = linsl.front();
    if (L1 == L2) {
      lins.pop();
      linsl.pop();
      nq.push(nq1);
      nq.push(nq2);
    }
  }
  int ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0;
  while (!nq.empty()) {
    ans1 = nq.front(), ans2, ans3, ans4;
    nq.pop();
    if (nq.empty()) break;
    ans2 = nq.front();
    nq.pop();
    if (lq.empty()) break;
    if (!lq.empty()) {
      ans3 = lq.front();
      lq.pop();
      ans4 = lq.front();
      lq.pop();
    }
    m++;
    an.push(ans1);
    an.push(ans3);
    an.push(ans2);
    an.push(ans4);
    ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0;
  }
  while (!lq.empty()) {
    if (ans1 > 0) {
      ans2 = lq.front();
      lq.pop();
      if (lq.empty()) break;
      ans3 = lq.front();
      lq.pop();
      if (lq.empty()) break;
      ans4 = lq.front();
      lq.pop();
      m++;
      an.push(ans1);
      an.push(ans3);
      an.push(ans2);
      an.push(ans4);
      ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0;
    } else {
      ans1 = lq.front();
      lq.pop();
      if (lq.empty()) break;
      ans2 = lq.front();
      lq.pop();
      if (lq.empty()) break;
      ans3 = lq.front();
      lq.pop();
      if (lq.empty()) break;
      ans4 = lq.front();
      lq.pop();
      m++;
      an.push(ans1);
      an.push(ans3);
      an.push(ans2);
      an.push(ans4);
      ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0;
    }
  }
  printf("%d\n", m);
  while (!an.empty()) {
    ans1 = an.front();
    an.pop();
    ans3 = an.front();
    an.pop();
    ans2 = an.front();
    an.pop();
    ans4 = an.front();
    an.pop();
    cout << in[ans1] << " " << in[ans3] << endl;
    cout << in[ans2] << " " << in[ans4] << endl;
  }
  return 0;
}
