#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  vector<pair<int, pair<char, string> > > v;
  map<pair<int, char>, int> myp;
  for (int i = 0; i < n; i++) {
    string x;
    cin >> x;
    char c;
    int cnt = 0;
    for (int i = 0; i < x.length(); i++) {
      if (x[i] == 'a' || x[i] == 'e' || x[i] == 'i' || x[i] == 'o' ||
          x[i] == 'u') {
        c = x[i];
        cnt++;
      }
    }
    myp[{cnt, c}]++;
    v.push_back(make_pair(cnt, make_pair(c, x)));
  }
  sort(v.begin(), v.end());
  vector<pair<string, string> > v1, v2;
  vector<pair<int, pair<char, string> > > rem;
  for (int i = 0; i < v.size();) {
    if (i + 1 < v.size() && v[i].first == v[i + 1].first &&
        v[i].second.first == v[i + 1].second.first) {
      v1.push_back(make_pair(v[i].second.second, v[i + 1].second.second));
      i += 2;
    } else if (i + 1 < v.size() && v[i].first == v[i + 1].first &&
               v[i].second.first != v[i + 1].second.first &&
               myp[{v[i + 1].first, v[i + 1].second.first}] % 2 != 0) {
      v2.push_back(make_pair(v[i].second.second, v[i + 1].second.second));
      i += 2;
    } else {
      rem.push_back(v[i]);
      i++;
    }
  }
  for (int j = 0; j < rem.size();) {
    if (j + 1 < rem.size() && rem[j].first == rem[j + 1].first) {
      v2.push_back(make_pair(rem[j].second.second, rem[j + 1].second.second));
      j += 2;
    } else
      j++;
  }
  int x = v1.size();
  int y = v2.size();
  int ans = 0;
  if (x >= y) {
    ans = ans + y;
    ans = ans + ((x - y) / 2);
  } else
    ans = ans + x;
  cout << ans << endl;
  x--;
  y--;
  while (y >= 0 && x >= 0) {
    cout << v2[y].first << " " << v1[x].first << endl;
    cout << v2[y].second << " " << v1[x].second << endl;
    x--;
    y--;
  }
  while (x >= 1) {
    cout << v1[x].first << " " << v1[x - 1].first << endl;
    cout << v1[x].second << " " << v1[x - 1].second << endl;
    x = x - 2;
  }
  return 0;
}
