#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n;
string s[N];
pair<int, char> cn(string& s) {
  int c = 0;
  char t = ' ';
  for (auto x : s)
    if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u') c++, t = x;
  return make_pair(c, t);
}
struct st {
  int x;
  char y;
  int id;
  bool operator<(const st& b) const {
    return x > b.x || (x == b.x && y > b.y) ||
           (x == b.x && y == b.y && id > b.id);
  }
} b[N], c[N];
vector<pair<int, int> > d, e;
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> s[i];
    pair<int, char> x = cn(s[i]);
    b[i] = ((st){x.first, x.second, i});
  }
  sort(b + 1, b + 1 + n);
  int t = 0;
  for (int i = 1; i <= n; i++) {
    if (i < n && b[i].x == b[i + 1].x && b[i].y == b[i + 1].y) {
      d.push_back(make_pair(b[i].id, b[i + 1].id));
      i++;
    } else
      c[t++] = b[i];
  }
  for (int i = 0; i + 1 < t; i++)
    if (c[i].x == c[i + 1].x) {
      e.push_back(make_pair(c[i].id, c[i + 1].id));
      i++;
    }
  int ans = min(d.size(), (d.size() + e.size()) / 2);
  cout << ans << endl;
  for (int i = 0; i < ans; i++) {
    int x = d.back().first, y = d.back().second, u, v;
    d.pop_back();
    if (!e.empty()) {
      u = e.back().first, v = e.back().second;
      e.pop_back();
    } else {
      u = d.back().first, v = d.back().second;
      d.pop_back();
    }
    cout << s[u] << " " << s[x] << endl;
    cout << s[v] << " " << s[y] << endl;
  }
  return 0;
}
