#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 2;
int n;
vector<pair<string, string>> comp, semi;
map<int, map<char, vector<string>>> lyr;
vector<pair<pair<string, string>, pair<string, string>>> ans;
bool vowel(char x) {
  for (char i : {'a', 'i', 'u', 'e', 'o'}) {
    if (x == i) return 1;
  }
  return 0;
}
int cntVowel(string s) {
  int ret = 0;
  for (int i = 0; i < s.length(); i++) {
    ret += vowel(s[i]);
  }
  return ret;
}
char lsVowel(string s) {
  for (int i = s.length() - 1; i >= 0; i--) {
    if (vowel(s[i])) return s[i];
  }
  return 'x';
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    string x;
    cin >> x;
    int cnt = cntVowel(x);
    char ls = lsVowel(x);
    lyr[cnt][ls].push_back(x);
  }
  for (auto &i : lyr) {
    for (auto &j : i.second) {
      while (j.second.size() >= 2) {
        string a, b;
        a = j.second.back();
        j.second.pop_back();
        b = j.second.back();
        j.second.pop_back();
        comp.push_back(make_pair(a, b));
      }
    }
    vector<string> v;
    for (auto &j : i.second) {
      while (!j.second.empty()) {
        v.push_back(j.second.back());
        j.second.pop_back();
      }
    }
    while (v.size() >= 2) {
      string a, b;
      a = v.back();
      v.pop_back();
      b = v.back();
      v.pop_back();
      semi.push_back(make_pair(a, b));
    }
  }
  while (!semi.empty() && !comp.empty()) {
    ans.push_back(make_pair(semi.back(), comp.back()));
    semi.pop_back();
    comp.pop_back();
  }
  while (comp.size() >= 2) {
    pair<string, string> a = comp.back();
    comp.pop_back();
    pair<string, string> b = comp.back();
    comp.pop_back();
    ans.push_back(make_pair(a, b));
  }
  cout << ans.size() << '\n';
  for (auto i : ans) {
    cout << i.first.first << ' ' << i.second.first << '\n'
         << i.first.second << ' ' << i.second.second << '\n';
  }
  return 0;
}
