#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7;
const ll INF = 1e18 + 9;
ll powmod(ll base, ll exp, const ll MOD) {
  ll ans = 1;
  while (exp) {
    if (exp & 1) ans = (ans * base) % MOD;
    base = (base * base) % MOD;
    exp >>= 1;
  }
  return ans;
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) { return (a * b) / gcd(a, b); }
ll modInverse(ll n, const ll p) { return powmod(n, p - 2, p); }
void add(ll& x, ll v) {
  x = (x + v) % MOD;
  if (x < 0) x += MOD;
}
void test_case() {}
const int mxN = 1e5 + 1;
map<int, map<char, vector<string>>> mp;
const char vowels[5] = {'a', 'e', 'o', 'i', 'u'};
bool isvowel(char ch) {
  return ch == 'a' || ch == 'e' || ch == 'o' || ch == 'i' || ch == 'u';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  int n;
  cin >> n;
  int mx = 0;
  for (int i = 0; i < n; ++i) {
    string t;
    cin >> t;
    mx = max(mx, (int)t.size());
    int cnt = 0;
    char last = '?';
    for (auto& ch : t) {
      if (isvowel(ch)) {
        ++cnt;
        last = ch;
      }
    }
    mp[cnt][last].push_back(t);
  }
  vector<pair<string, string>> s1, s2;
  for (auto& it : mp) {
    for (auto& last : it.second) {
      while (last.second.size() >= 2) {
        string t1 = last.second.back();
        last.second.pop_back();
        string t2 = last.second.back();
        last.second.pop_back();
        s1.push_back({t1, t2});
      }
    }
    vector<string> remaining;
    for (auto& last : it.second) {
      for (auto& word : last.second) remaining.push_back(word);
    }
    while (remaining.size() >= 2) {
      string t1 = remaining.back();
      remaining.pop_back();
      string t2 = remaining.back();
      remaining.pop_back();
      s2.push_back({t1, t2});
    }
  }
  vector<pair<pair<string, string>, pair<string, string>>> ans;
  while (!s1.empty() && !s2.empty()) {
    auto it1 = s1.back();
    auto it2 = s2.back();
    ans.push_back({it2, it1});
    s1.pop_back();
    s2.pop_back();
  }
  while (s1.size() >= 2) {
    auto it1 = s1.back();
    s1.pop_back();
    auto it2 = s1.back();
    s1.pop_back();
    ans.push_back({it2, it1});
  }
  cout << ans.size() << endl;
  for (auto it : ans) {
    cout << it.first.first << " " << it.second.first << "\n";
    cout << it.first.second << " " << it.second.second << "\n";
  }
  return 0;
}
