#include <bits/stdc++.h>
using namespace std;
vector<string> word;
vector<int> lyric[5][1000005], temp[1000005];
vector<pair<int, int>> mpair, tpair;
vector<pair<pair<int, int>, pair<int, int>>> song;
map<int, int> vowel;
int vnum(string str) {
  int res = 0;
  for (int i = 0; i < str.length(); i++) {
    if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' ||
        str[i] == 'u')
      res++;
  }
  return res;
}
int lvowel(string str) {
  int lv = 0;
  for (int i = 0; i < str.length(); i++) {
    if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' ||
        str[i] == 'u')
      lv = vowel[str[i]];
  }
  return lv;
}
int main() {
  int i, j, k;
  int n;
  string str;
  vowel['a'] = 0;
  vowel['e'] = 1;
  vowel['i'] = 2;
  vowel['o'] = 3;
  vowel['u'] = 4;
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    cin >> str;
    word.push_back(str);
    int vn, vl;
    vn = vnum(str);
    vl = lvowel(str);
    lyric[vl][vn].push_back(i);
  }
  for (i = 1; i <= 1000000; i++) {
    for (j = 0; j < 5; j++) {
      for (k = lyric[j][i].size() - 1; k > 0; k -= 2) {
        mpair.push_back(make_pair(lyric[j][i][k], lyric[j][i][k - 1]));
      }
    }
  }
  for (i = 1; i <= 1000000; i++) {
    for (j = 0; j < 5; j++) {
      if (lyric[j][i].size() % 2) temp[i].push_back(lyric[j][i][0]);
    }
  }
  for (i = 1; i <= 1000000; i++) {
    for (j = 0; (j + 1) < temp[i].size(); j += 2)
      tpair.push_back(make_pair(temp[i][j], temp[i][j + 1]));
  }
  for (i = 0; i < tpair.size() && i < mpair.size(); i++) {
    song.push_back(make_pair(tpair[i], mpair[i]));
  }
  for (; (i + 1) < mpair.size(); i += 2) {
    song.push_back(make_pair(mpair[i], mpair[i + 1]));
  }
  printf("%d\n", song.size());
  for (i = 0; i < song.size(); i++) {
    cout << word[song[i].first.first] << " " << word[song[i].second.first]
         << endl;
    cout << word[song[i].first.second] << " " << word[song[i].second.second]
         << endl;
  }
}
