#include <bits/stdc++.h>
using namespace std;
bool vowel(char c) {
  return (c == 'a' || c == 'e' || c == 'o' || c == 'i' || c == 'u');
}
int cvowel(string& s) {
  int n = 0;
  for (char& c : s) {
    n += vowel(c);
  }
  return n;
}
int getlast(string& s) {
  for (int i = s.size() - 1;; i--) {
    if (vowel(s[i])) {
      return s[i];
    }
  }
}
const int KEK = 1000001;
vector<string> ss[KEK];
vector<pair<char, int>> vv[KEK];
int main() {
  ios::sync_with_stdio(0);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    int cnt = cvowel(s);
    ss[cnt].push_back(s);
    vv[cnt].push_back(make_pair(getlast(s), ss[cnt].size() - 1));
  }
  vector<pair<string, string>> q1, q2;
  for (int i = 1; i < KEK; i++) {
    sort(vv[i].begin(), vv[i].end());
    int m = vv[i].size();
    vector<bool> inpair(m, false);
    for (int j = 1; j < m; j++) {
      if (vv[i][j - 1].first == vv[i][j].first) {
        inpair[j - 1] = inpair[j] = true;
        q2.push_back(
            make_pair(ss[i][vv[i][j - 1].second], ss[i][vv[i][j].second]));
        j++;
      }
    }
    int last = -1;
    for (int j = 0; j < m; j++) {
      if (inpair[j] == false) {
        if (last == -1) {
          last = j;
        } else {
          q1.push_back(
              make_pair(ss[i][vv[i][last].second], ss[i][vv[i][j].second]));
          last = -1;
        }
      }
    }
  }
  while (q2.size() > q1.size()) {
    q1.push_back(q2.back());
    q2.pop_back();
  }
  while (q1.size() > q2.size()) {
    q1.pop_back();
  }
  cout << q1.size() << endl;
  for (int i = 0; i < q1.size(); i++) {
    cout << q1[i].first << ' ' << q2[i].first << '\n';
    cout << q1[i].second << ' ' << q2[i].second << '\n';
  }
}
