#include <bits/stdc++.h>
using namespace std;
const long long mxn = 100010;
vector<string> v[5][mxn];
long long vowel_index(long long ch) {
  if (ch == 'a') return 0;
  if (ch == 'e') return 1;
  if (ch == 'i') return 2;
  if (ch == 'o') return 3;
  if (ch == 'u') return 4;
}
pair<long long, long long> process(string& s) {
  long long vw, cnt = 0;
  for (long long i = (0), ed = (s.size()); i < (ed); ++i) {
    if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' ||
        s[i] == 'u') {
      vw = vowel_index(s[i]);
      cnt++;
    }
  }
  return make_pair(vw, cnt);
}
struct result {
  string s[4];
  result() {}
  result(string a, string b, string c, string d) {
    s[0] = a, s[1] = b, s[2] = c, s[3] = d;
  }
};
void solve(long long tc) {
  long long n;
  scanf("%lld", &n);
  string s;
  long long mxln = 0;
  pair<long long, long long> p;
  for (long long i = (0), ed = (n); i < (ed); ++i) {
    cin >> s;
    p = process(s);
    mxln = max(mxln, p.second);
    v[p.first][p.second].push_back(s);
  }
  vector<pair<string, string> > sec, fir;
  vector<string> vlen[mxln + 5];
  long long ed;
  for (long long i = (0), ed = (5); i < (ed); ++i) {
    for (long long j = (0), ed = (mxln + 1); j < (ed); ++j) {
      long long sz = v[i][j].size(), k = 0;
      for (; k + 1 < sz; k += 2) {
        sec.push_back({v[i][j][k], v[i][j][k + 1]});
      }
      if (sz & 1) vlen[j].push_back(v[i][j][k]);
    }
  }
  for (long long i = (0), ed = (mxln + 1); i < (ed); ++i) {
    long long sz = vlen[i].size(), k = 0;
    for (; k + 1 < sz; k += 2) {
      fir.push_back({vlen[i][k], vlen[i][k + 1]});
    }
  }
  long long sec_sz = sec.size(), fir_sz = fir.size();
  long long sz = min(sec_sz, fir_sz);
  vector<result> res;
  for (long long i = (0), ed = (sz); i < (ed); ++i) {
    res.push_back({fir[i].first, sec[i].first, fir[i].second, sec[i].second});
  }
  if (sec_sz > sz) {
    for (long long i = sz; i + 1 < sec_sz; i += 2) {
      res.push_back(
          {sec[i].first, sec[i + 1].first, sec[i].second, sec[i + 1].second});
    }
  }
  cout << res.size() << '\n';
  for (long long i = (0), ed = (res.size()); i < (ed); ++i) {
    cout << res[i].s[0] << ' ' << res[i].s[1] << '\n';
    cout << res[i].s[2] << ' ' << res[i].s[3] << '\n';
  }
}
int32_t main() {
  solve(1);
  return 0;
}
