#include <bits/stdc++.h>
using namespace std;
void no() {
  cout << "NO";
  exit(0);
}
pair<int64_t, char> calc(string &str) {
  int64_t ans = 0;
  char lst = 'q';
  for (int64_t i = 0; i < str.size(); ++i) {
    if (str[i] == 'a' || str[i] == 'o' || str[i] == 'u' || str[i] == 'i' ||
        str[i] == 'e') {
      ++ans;
      lst = str[i];
    }
  }
  return {ans, lst};
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  int64_t n;
  cin >> n;
  vector<pair<pair<int64_t, char>, string> > v, v2;
  for (int64_t i = 0; i < n; ++i) {
    string str;
    cin >> str;
    pair<int64_t, char> pr = calc(str);
    v.push_back({pr, str});
  }
  sort(v.begin(), v.end());
  deque<pair<pair<int64_t, char>, string> > d1, d2;
  for (int64_t i = 0; i < v.size(); ++i) {
    if (i < v.size() - 1 && v[i].first == v[i + 1].first) {
      d1.push_front(v[i]);
      d2.push_front(v[i + 1]);
      ++i;
    } else
      v2.push_back(v[i]);
  }
  for (int64_t i = 0; i < (int64_t)v2.size() - 1; ++i) {
    if (v2[i].first.first == v2[i + 1].first.first) {
      d1.push_back(v2[i]);
      d2.push_back(v2[i + 1]);
      ++i;
    }
  }
  vector<pair<pair<string, string>, pair<string, string> > > ans;
  while (d1.size() > 1) {
    if (d1.front().first.second != d2.front().first.second) break;
    ans.push_back({{d1.back().second, d1.front().second},
                   {d2.back().second, d2.front().second}});
    d1.pop_front();
    d1.pop_back();
    d2.pop_front();
    d2.pop_back();
  }
  cout << ans.size() << endl;
  for (int64_t i = 0; i < ans.size(); ++i) {
    cout << ans[i].first.first << ' ' << ans[i].first.second << endl
         << ans[i].second.first << ' ' << ans[i].second.second << endl;
  }
}
