#include <bits/stdc++.h>
using namespace std;
long long int MOD = 1000000007;
long long int gcd(long long int a, long long int b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return a / gcd(a, b) * b;
}
long long int power(long long int a, long long int n) {
  if (n == 0) return 1;
  long long int p = power(a, n / 2);
  p = (p * p) % MOD;
  if (n % 2)
    return (p * a) % MOD;
  else
    return p % MOD;
}
pair<int, char> count_vowels(const string& a) {
  long long int count = 0;
  char c;
  for (char i : a) {
    if (i == 'a' || i == 'e' || i == 'i' || i == 'o' || i == 'u') {
      count++;
      c = i;
    }
  }
  return {count, c};
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  long long int test = 1;
  while (test--) {
    long long int n;
    cin >> n;
    vector<string> s(n);
    for (long long int i = 0; i < n; i++) {
      cin >> s[i];
    }
    map<int, map<char, vector<string>>> m;
    for (long long int i = 0; i < n; i++) {
      pair<long long int, char> p = count_vowels(s[i]);
      if (p.first > 0) {
        m[p.first][p.second].push_back(s[i]);
      }
    }
    vector<pair<string, string>> complete, semicomplete;
    for (auto& x : m) {
      for (auto& y : x.second) {
        while (y.second.size() >= 2) {
          string one = y.second.back();
          y.second.pop_back();
          string two = y.second.back();
          y.second.pop_back();
          complete.emplace_back(one, two);
        }
      }
      vector<string> rem_same_count;
      for (auto& y : x.second) {
        for (const auto& z : y.second) {
          rem_same_count.push_back(z);
        }
        y.second.clear();
      }
      while (rem_same_count.size() >= 2) {
        string one = rem_same_count.back();
        rem_same_count.pop_back();
        string two = rem_same_count.back();
        rem_same_count.pop_back();
        semicomplete.emplace_back(one, two);
      }
    }
    vector<pair<pair<string, string>, pair<string, string>>> ans;
    while (!complete.empty() && !semicomplete.empty()) {
      string firstlinesecond = complete.back().first;
      string secondlinesecond = complete.back().second;
      complete.pop_back();
      string firstlinefirst = semicomplete.back().first;
      string secondlinefirst = semicomplete.back().second;
      semicomplete.pop_back();
      pair<pair<string, string>, pair<string, string>> p = {
          {firstlinefirst, firstlinesecond},
          {secondlinefirst, secondlinesecond}};
      ans.emplace_back(p);
    }
    while (!complete.empty() && complete.size() >= 2) {
      string firstlinesecond = complete.back().first;
      string secondlinesecond = complete.back().second;
      complete.pop_back();
      string firstlinefirst = complete.back().first;
      string secondlinefirst = complete.back().second;
      complete.pop_back();
      pair<pair<string, string>, pair<string, string>> p = {
          {firstlinefirst, firstlinesecond},
          {secondlinefirst, secondlinesecond}};
      ans.emplace_back(p);
    }
    cout << ans.size() << '\n';
    for (auto x : ans) {
      cout << x.first.first << " " << x.first.second << '\n';
      cout << x.second.first << " " << x.second.second << '\n';
    }
  }
  return 0;
}
