#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, ch = getchar();
  bool fg = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') fg = 0;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return fg ? x : -x;
}
map<pair<char, int>, string> mp;
map<string, int> tt;
set<string> S[100003];
stack<pair<string, string> > a, b;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.precision(6);
  cout << fixed;
  int n;
  cin >> n;
  string s;
  int m = 0;
  for (int i = 1; i <= n; i++) {
    cin >> s;
    tt[s]++;
    int cnt = 0;
    char last;
    for (auto x : s) {
      if ((x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u')) {
        cnt++;
        last = x;
      }
    }
    m = max(m, cnt);
    pair<char, int> q = make_pair(last, cnt);
    if (mp.count(q) && mp[q] != "0") {
      tt[s]--;
      tt[mp[q]]--;
      b.push(pair<string, string>(mp[q], s));
      mp[q] = "0";
    } else {
      mp[q] = s;
      S[cnt].insert(s);
    }
  }
  for (int i = 1; i <= m; i++) {
    for (auto it = S[i].begin(); it != S[i].end();) {
      if (tt[*it] == 0) {
        it++;
        continue;
      }
      s = *it;
      if (--tt[*it]) {
        tt[*it]--;
        a.push(pair<string, string>(s, s));
        continue;
      }
      it++;
      while (it != S[i].end() && tt[*it] == 0) it++;
      if (it == S[i].end()) break;
      a.push(pair<string, string>(s, *it));
      it++;
    }
  }
  if (a.size() >= b.size()) {
    cout << b.size() << endl;
    while (!b.empty()) {
      auto x = a.top();
      a.pop();
      auto y = b.top();
      b.pop();
      cout << x.first << " " << y.first << endl;
      cout << x.second << " " << y.second << endl;
    }
  } else {
    int k = b.size() - a.size();
    cout << (k / 2) + a.size() << endl;
    while (!a.empty()) {
      auto x = a.top();
      a.pop();
      auto y = b.top();
      b.pop();
      cout << x.first << " " << y.first << endl;
      cout << x.second << " " << y.second << endl;
    }
    while (!b.empty()) {
      auto x = b.top();
      b.pop();
      if (b.empty()) break;
      auto y = b.top();
      b.pop();
      cout << x.first << " " << y.first << endl;
      cout << x.second << " " << y.second << endl;
    }
  }
  return 0;
}
