#include <bits/stdc++.h>
using namespace std;
vector<pair<int, pair<char, string>>> vec;
int main() {
  unsigned long long int n, i, j, n1, cnt = 0;
  cin >> n;
  string s;
  char r;
  for (i = 1; i <= n; i++) {
    cin >> s;
    n1 = s.size();
    cnt = 0;
    for (j = 0; j < n1; j++) {
      if (s[j] == 'a' || s[j] == 'e' || s[j] == 'i' || s[j] == 'o' ||
          s[j] == 'u') {
        cnt++;
        r = s[j];
      }
    }
    vec.push_back(make_pair(cnt, make_pair(r, s)));
  }
  sort(vec.begin(), vec.end());
  vector<pair<string, string>> v1;
  vector<pair<string, string>> v2, v4, v5;
  vector<pair<int, pair<char, string>>> v3;
  for (i = 0; i < vec.size(); i++) {
    if (i == vec.size() - 1) {
      v3.push_back(vec[i]);
      break;
    }
    if (vec[i].first == vec[i + 1].first) {
      if (vec[i].second.first == vec[i + 1].second.first) {
        v1.push_back(make_pair(vec[i].second.second, vec[i + 1].second.second));
        i++;
        continue;
      } else {
        v3.push_back(vec[i]);
        continue;
      }
    } else {
      v3.push_back(vec[i]);
      continue;
    }
  }
  sort(v3.begin(), v3.end());
  for (i = 0; i < v3.size(); i++) {
    if (i == v3.size() - 1) break;
    if (v3[i].first == v3[i + 1].first) {
      v2.push_back(make_pair(v3[i].second.second, v3[i + 1].second.second));
      i++;
    }
  }
  n1 = min(v1.size(), v2.size());
  cnt = 0;
  cnt = cnt + n1;
  if (v1.size() > n1) {
    cnt += (v1.size() - n1) / 2;
  }
  cout << cnt << endl;
  for (i = 0; i < n1; i++) {
    cout << v2[i].first << " " << v1[i].first << endl;
    cout << v2[i].second << " " << v1[i].second << endl;
  }
  if (cnt > n1) {
    for (i = n1; i < v1.size(); i++) {
      if (v1.size() - 1 > i) {
        cout << v1[i].first << " " << v1[i + 1].first << endl;
        cout << v1[i].second << " " << v1[i + 1].second << endl;
        i++;
      }
    }
  }
  return 0;
}
