#include <bits/stdc++.h>
using namespace std;
string word[201000];
int cnt[201000];
int lst[201000];
int n;
int tem[1000];
const char upp[1000] = {'a', 'e', 'i', 'o', 'u'};
bool f[1000];
int order[201000];
queue<pair<int, int> > q1, q2;
bool cmp(int i, int j) {
  return cnt[i] < cnt[j] || cnt[i] == cnt[j] && lst[i] < lst[j];
}
bool flag[201000];
int main() {
  f['a'] = true;
  f['e'] = true;
  f['i'] = true;
  f['o'] = true;
  f['u'] = true;
  cin >> n;
  for (register int i = (0); i < (n); i++) {
    cin >> word[i];
    lst[i] = -1;
    for (register int j = (0); j < ((word[i].size())); j++)
      if (f[word[i][j]]) {
        cnt[i]++;
        lst[i] = word[i][j];
      }
  }
  for (register int i = (0); i < (n); i++) order[i] = i;
  sort(order, order + n, cmp);
  for (register int i = (0); i < (n - 1); i++) {
    if (!flag[i] && cnt[order[i]] == cnt[order[i + 1]] &&
        lst[order[i]] == lst[order[i + 1]] && cnt[order[i]] > 0) {
      flag[i] = flag[i + 1] = true;
      q1.push(make_pair(order[i], order[i + 1]));
    }
  }
  int last = -1;
  for (int i = 0; i < n; i++) {
    if (!flag[i]) {
      if (last == -1) {
        last = i;
      } else {
        if (cnt[order[last]] == cnt[order[i]]) {
          q2.push(make_pair(order[last], order[i]));
          last = -1;
        } else
          last = i;
      }
    }
  }
  pair<int, int> p1, p2;
  int ans;
  if (q2.size() > q1.size())
    cout << (ans = q1.size()) << endl;
  else
    cout << (ans = q2.size() + (q1.size() - q2.size()) / 2) << endl;
  while (ans--) {
    if (q2.size() > 0) {
      p1 = q2.front();
      q2.pop();
    } else {
      p1 = q1.front();
      q1.pop();
    }
    p2 = q1.front();
    q1.pop();
    cout << word[p1.first] << ' ' << word[p2.first] << endl;
    cout << word[p1.second] << ' ' << word[p2.second] << endl;
  }
  return ~~(0 ^ 0 ^ 0);
}
