#include <bits/stdc++.h>
const int INF = 1000 * 1000 * 1000 + 10;
const int N = 2 * 1000 * 1000 + 10;
using namespace std;
string d = "aouei";
bool comp(pair<int, pair<char, string>> a, pair<int, pair<char, string>> b) {
  return (a.first < b.first ||
          (a.first == b.first) && (a.second.first < b.second.first));
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  vector<pair<int, pair<char, string>>> a(n);
  for (int i = 0; i < n; ++i) {
    string t;
    cin >> t;
    string copy = t;
    reverse(copy.begin(), copy.end());
    int cnt = 0;
    char last = 'z';
    for (int j = 0; j < copy.size(); ++j) {
      for (int k = 0; k < 5; ++k) {
        if (copy[j] == d[k]) {
          cnt++;
          if (last == 'z') last = d[k];
          break;
        }
      }
    }
    a[i] = {cnt, {last, t}};
  }
  sort(a.begin(), a.end(), comp);
  vector<pair<string, string>> end;
  vector<pair<string, string>> st;
  for (int i = 1; i < n; ++i) {
    if (a[i - 1].first == a[i].first &&
        a[i - 1].second.first == a[i].second.first) {
      a[i - 1].first = 0;
      a[i].first = 0;
      end.push_back({a[i].second.second, a[i - 1].second.second});
    }
  }
  sort(a.begin(), a.end(), comp);
  for (int i = 1; i < n; ++i) {
    if (a[i - 1].first != 0 && a[i].first == a[i - 1].first) {
      a[i - 1].first = 0;
      a[i].first = 0;
      st.push_back({a[i].second.second, a[i - 1].second.second});
    }
  }
  int m = min(end.size(), st.size());
  cout << m + max(int(end.size()) - int(st.size()), 0) / 2 << '\n';
  for (int i = 0; i < m; ++i) {
    cout << st[i].first << " " << end[i].first << '\n';
    cout << st[i].second << " " << end[i].second << '\n';
  }
  if (end.size() - st.size() >= 2) {
    for (int i = m + 1; i < end.size(); i += 2) {
      cout << end[i - 1].first << " " << end[i].first << '\n';
      cout << end[i - 1].second << " " << end[i].second << '\n';
    }
  }
}
