#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200008;
const long long inf = 1000000001;
const long long INF = 2e18;
const long double EPS = 1e-7;
const long long mod = inf + 6;
const int moff = 998244353;
const int mod13 = 1000003;
const long double PI = acos(-1.0);
bool vw(char c) {
  return c == 'a' || c == 'i' || c == 'o' || c == 'e' || c == 'u';
}
int cc(string s) {
  int ans = 0;
  for (int i = 0; i < s.size(); ++i) ans += vw(s[i]);
  return ans;
}
char last(string s) {
  for (int i = s.size() - 1; i >= 0; --i) {
    if (vw(s[i])) return s[i];
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  ;
  int n;
  cin >> n;
  vector<string> a(n);
  for (long long i = 0; i < a.size(); ++i) cin >> a[i];
  ;
  unordered_map<char, unordered_map<int, vector<string>>> wtf;
  set<int> ololo;
  for (int i = 0; i < n; ++i) {
    wtf[last(a[i])][cc(a[i])].push_back(a[i]);
    ololo.insert(cc(a[i]));
  }
  vector<pair<string, string>> fck;
  vector<string> kekos;
  for (char aa = 'a'; aa <= 'z'; ++aa) {
    for (int i : ololo) {
      for (int j = 0; j + 1 < wtf[aa][i].size(); j += 2) {
        fck.push_back({wtf[aa][i][j], wtf[aa][i][j + 1]});
      }
      if (wtf[aa][i].size() % 2 == 1) kekos.push_back(wtf[aa][i].back());
    }
  }
  vector<pair<pair<string, string>, pair<string, string>>> ans;
  unordered_map<int, vector<string>> kekkos;
  for (auto i : kekos) {
    kekkos[cc(i)].push_back(i);
  }
  vector<pair<string, string>> semcom;
  for (int i : ololo) {
    for (int j = 0; j + 1 < kekkos[i].size(); j += 2) {
      semcom.push_back({kekkos[i][j], kekkos[i][j + 1]});
    }
  }
  for (int i = 0; i < min(fck.size(), semcom.size()); ++i) {
    ans.push_back(
        {{semcom[i].first, fck[i].first}, {semcom[i].second, fck[i].second}});
  }
  fck.erase(fck.begin(), fck.begin() + min(fck.size(), semcom.size()));
  while (fck.size() >= 2) {
    ans.push_back({{fck.back().first, fck[fck.size() - 2].first},
                   {fck.back().second, fck[fck.size() - 2].second}});
    fck.pop_back();
    fck.pop_back();
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); ++i) {
    cout << ans[i].first.first << ' ' << ans[i].first.second << endl
         << ans[i].second.first << ' ' << ans[i].second.second << endl;
  }
}
