#include <bits/stdc++.h>
using namespace std;
const int inf = (int)1e9;
struct word {
  string full, vowels;
  int num;
  word() {
    full = "";
    vowels = "";
    num = -1;
  }
  word(const string &_full, const string &_vowels, const int &_num) {
    full = _full;
    vowels = _vowels;
    num = _num;
  }
};
void str_in(string &s) {
  s = "";
  char c = getchar();
  while (c < 'a' || c > 'z') {
    c = getchar();
  }
  while (c >= 'a' && c <= 'z') {
    s += c;
    c = getchar();
  }
  return;
}
bool cmp_vowels(word a, word b) {
  if (a.vowels.size() != b.vowels.size()) {
    return a.vowels.size() < b.vowels.size();
  }
  return a.vowels.back() < b.vowels.back();
}
void print(pair<int, int> &a, pair<int, int> &b, vector<word> &v) {
  for (int i = 0; i < (int)v[a.first].full.size(); ++i) {
    printf("%c", v[a.first].full[i]);
  }
  printf(" ");
  for (int i = 0; i < (int)v[b.first].full.size(); ++i) {
    printf("%c", v[b.first].full[i]);
  }
  printf("\n");
  for (int i = 0; i < (int)v[a.second].full.size(); ++i) {
    printf("%c", v[a.second].full[i]);
  }
  printf(" ");
  for (int i = 0; i < (int)v[b.second].full.size(); ++i) {
    printf("%c", v[b.second].full[i]);
  }
  printf("\n");
  return;
}
int main() {
  int n;
  scanf("%d", &n);
  vector<word> v;
  for (int i = 0; i < n; ++i) {
    string s;
    str_in(s);
    string _s = "";
    for (int j = 0; j < (int)s.size(); ++j) {
      if (s[j] == 'a' || s[j] == 'e' || s[j] == 'i' || s[j] == 'o' ||
          s[j] == 'u') {
        _s += s[j];
      }
    }
    v.push_back(word(s, _s, i));
  }
  sort(v.begin(), v.end(), cmp_vowels);
  vector<pair<int, int> > last;
  vector<int> used(n, 0);
  for (int i = 0; i < n - 1; ++i) {
    if (used[i] == 1) {
      continue;
    }
    if (v[i + 1].vowels.size() == v[i].vowels.size() &&
        v[i + 1].vowels.back() == v[i].vowels.back()) {
      last.push_back(make_pair(i, i + 1));
      used[i] = 1;
      used[i + 1] = 1;
    }
  }
  vector<pair<int, int> > first;
  for (int i = 0; i < n - 1; ++i) {
    if (used[i] == 1) {
      continue;
    }
    for (int j = i + 1; j < n; ++j) {
      if (used[j] == 1) {
        continue;
      }
      if (v[i].vowels.size() == v[j].vowels.size()) {
        first.push_back(make_pair(i, j));
        used[i] = 1;
        used[j] = 1;
        i = j;
        break;
      } else {
        i = j - 1;
        break;
      }
    }
  }
  if (first.size() >= last.size()) {
    printf("%d\n", (int)last.size());
    for (int i = 0; i < (int)last.size(); ++i) {
      print(first[i], last[i], v);
    }
  } else {
    printf("%d\n",
           (int)first.size() + ((int)last.size() - (int)first.size()) / 2);
    for (int i = 0; i < (int)first.size(); ++i) {
      print(first[i], last[i], v);
    }
    for (int i = (int)first.size(); i < (int)last.size() - 1; i += 2) {
      print(last[i], last[i + 1], v);
    }
  }
  return 0;
}
