#include <bits/stdc++.h>
using namespace std;
struct answer {
  pair<long long, long long> second;
  pair<long long, long long> first;
};
long long n;
vector<string> s;
vector<long long> sv;
map<long long, vector<long long> > vowels;
map<pair<long long, long long>, vector<long long> > last;
int main() {
  std::ios::sync_with_stdio(false);
  cin >> n;
  for (long long i = 0; i < n; i++) {
    string t;
    cin >> t;
    long long v = 0;
    char l = -1;
    for (auto c : t) {
      if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
        v++;
        l = c;
      }
    }
    s.push_back(t);
    vowels[v].push_back(i);
    last[pair<long long, long long>(v, l)].push_back(i);
    sv.push_back(v);
  }
  vector<pair<long long, long long> > pans;
  set<long long> pused;
  for (auto p : last) {
    if (p.second.size() < 2) continue;
    for (unsigned long long i = 1; i < p.second.size(); i += 2) {
      pans.push_back(pair<long long, long long>(p.second[i - 1], p.second[i]));
      pused.insert(p.second[i - 1]);
      pused.insert(p.second[i]);
    }
  }
  vector<pair<long long, long long> > pos;
  for (auto q : vowels) {
    long long l1 = -1, l2 = -1;
    for (auto x : q.second) {
      if (pused.count(x) == 0) {
        if (l1 == -1)
          l1 = x;
        else
          l2 = x;
      }
      if (l1 != -1 && l2 != -1) {
        pos.push_back(pair<long long, long long>(l1, l2));
        l1 = -1;
        l2 = -1;
      }
    }
  }
  vector<answer> ans;
  unsigned long long posidx = 0;
  unsigned long long ansidx = 0;
  for (ansidx = 0; ansidx < pans.size() && posidx < pos.size();
       ansidx++, posidx++) {
    answer x;
    x.second = pans[ansidx];
    x.first = pos[posidx];
    ans.push_back(x);
  }
  long long xd = pans.size();
  for (long long i = xd - 1; i > ansidx && i >= 0; i--, ansidx++) {
    answer x;
    x.second = pans[ansidx];
    x.first = pans[i];
    ans.push_back(x);
  }
  cout << ans.size() << "\n";
  for (auto x : ans) {
    cout << s[x.first.first] << ' ' << s[x.second.first] << "\n";
    cout << s[x.first.second] << ' ' << s[x.second.second] << "\n";
  }
}
