#include <bits/stdc++.h>
using namespace std;
map<int, map<int, vector<string> > > a;
char c;
long long cnt;
void xyz(string s) {
  cnt = 0;
  for (int i = 0; i < s.size(); i++) {
    if (s[i] == 'a' || s[i] == 'i' || s[i] == 'o' || s[i] == 'e' ||
        s[i] == 'u') {
      cnt++;
      c = s[i];
    }
  }
}
int main() {
  long long n, i, maxi = 0;
  cin >> n;
  string t;
  for (i = 0; i < n; i++) {
    cin >> t;
    xyz(t);
    maxi = max(maxi, cnt);
    a[cnt][c - 'a'].push_back(t);
  }
  vector<string> f, s;
  for (i = 1; i <= maxi; i++) {
    vector<string> x;
    for (int j = 0; j < 26; j++) {
      while (a[i][j].size() > 1) {
        f.push_back(a[i][j].back());
        a[i][j].pop_back();
        f.push_back(a[i][j].back());
        a[i][j].pop_back();
      }
      while (a[i][j].size()) {
        x.push_back(a[i][j].back());
        a[i][j].pop_back();
      }
    }
    while (x.size() > 1) {
      s.push_back(x.back());
      x.pop_back();
      s.push_back(x.back());
      x.pop_back();
    }
  }
  vector<string> ans;
  while (f.size() >= 2) {
    if (s.size() >= 2) {
      ans.push_back(s.back());
      s.pop_back();
      ans.push_back(f.back());
      f.pop_back();
      ans.push_back(s.back());
      s.pop_back();
      ans.push_back(f.back());
      f.pop_back();
    } else if (f.size() >= 4) {
      int y = f.size();
      ans.push_back(f[y - 3]);
      ans.push_back(f[y - 1]);
      ans.push_back(f[y - 4]);
      ans.push_back(f[y - 2]);
      f.pop_back();
      f.pop_back();
      f.pop_back();
      f.pop_back();
    } else
      break;
  }
  cout << ans.size() / 4 << endl;
  for (i = 0; i < ans.size(); i += 2) {
    cout << ans[i] << " " << ans[i + 1] << endl;
  }
  return 0;
}
