#include <bits/stdc++.h>
using namespace std;
struct node {
  int num;
  char s;
  int id;
} a[100005];
string s[100005];
string ans[100005];
vector<int> c, d, S;
char vow[10] = "aeiou";
int cmp(node x, node y) {
  if (x.num == y.num) return x.s < y.s;
  return x.num < y.num;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    cin >> s[i];
    a[i].id = i;
    for (int j = 0; j < s[i].size(); j++) {
      for (int k = 0; k < 5; k++) {
        if (s[i][j] == vow[k]) {
          a[i].num++;
          a[i].s = vow[k];
        }
      }
    }
  }
  sort(a, a + n, cmp);
  int pos = 0, t = 0;
  for (int i = 0; i < n; i++) {
    if (i + 1 < n && a[i].num == a[i + 1].num && a[i].s == a[i + 1].s) {
      c.push_back(i);
      d.push_back(i + 1);
      i++;
    } else
      S.push_back(i);
  }
  for (int i = 0; i < S.size() && pos < c.size(); i++) {
    if (i + 1 < S.size() && a[S[i]].num == a[S[i + 1]].num) {
      ans[t++] = s[a[S[i]].id] + " " + s[a[c[pos]].id];
      ans[t++] = s[a[S[i + 1]].id] + " " + s[a[d[pos]].id];
      pos++;
      i++;
    }
  }
  for (int i = pos; i + 1 < c.size(); i += 2) {
    ans[t++] = s[a[c[i]].id] + " " + s[a[c[i + 1]].id];
    ans[t++] = s[a[d[i]].id] + " " + s[a[d[i + 1]].id];
  }
  printf("%d\n", t / 2);
  for (int i = 0; i < t; i++) cout << ans[i] << "\n";
}
