#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 2;
struct {
  int x;
  int last;
  string it;
} a;
struct kek {
  string w, e, r, t;
};
map<char, int> bak;
vector<string> st[N + 5][7], q;
vector<pair<string, string> > be, en;
vector<kek> ans;
int n, m;
string ins;
char c;
bool frog = false;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  bak['u'] = 1;
  bak['a'] = 2;
  bak['o'] = 3;
  bak['e'] = 4;
  bak['i'] = 5;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> ins;
    m = ins.length();
    a.x = 0;
    a.last = 0;
    for (int j = 0; j < m; j++) {
      if (ins[j] == 'u' || ins[j] == 'a' || ins[j] == 'o' || ins[j] == 'e' ||
          ins[j] == 'i') {
        a.x++;
        c = ins[j];
        a.last = bak[c];
      }
    }
    a.it = ins;
    st[a.x][a.last].push_back(ins);
  }
  for (int i = 1; i <= N; i++) {
    q.clear();
    for (int j = 1; j <= 5; j++) {
      int k;
      for (k = 1; k < st[i][j].size(); k += 2) {
        en.push_back({st[i][j][k], st[i][j][k - 1]});
      }
      if (k == st[i][j].size()) {
        q.push_back(st[i][j][k - 1]);
      }
    }
    for (int j = 1; j < q.size(); j += 2) {
      be.push_back({q[j], q[j - 1]});
    }
  }
  while (!be.empty() && !en.empty()) {
    ans.push_back(
        {be.back().first, en.back().first, be.back().second, en.back().second});
    en.pop_back();
    be.pop_back();
  }
  for (int i = 1; i < en.size(); i += 2) {
    ans.push_back(
        {en[i].first, en[i - 1].first, en[i].second, en[i - 1].second});
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); ++i) {
    cout << ans[i].w << " " << ans[i].e << endl
         << ans[i].r << " " << ans[i].t << endl;
  }
}
