#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const char s[] = "aeiou";
string str;
vector<string> rec[N][5];
string ans1[100010][2], ans2[100010][2];
int check(char ch) {
  for (int i = 0; i < 5; i++) {
    if (ch == s[i]) return i;
  }
  return -1;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, sz, p, cnt, num, sum, ans, now;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> str;
    sz = str.size();
    cnt = 0;
    for (int j = sz - 1; j >= 0; j--) {
      num = check(str[j]);
      if (~num) {
        cnt++;
        if (cnt == 1) p = num;
      }
    }
    rec[cnt][p].push_back(str);
  }
  cnt = sum = 0;
  for (int i = 1; i <= 1000000; i++) {
    num = 0;
    for (int j = 0; j < 5; j++) {
      num += (int)rec[i][j].size();
      cnt += (int)rec[i][j].size() / 2;
    }
    sum += num / 2;
  }
  ans = min(sum / 2, cnt);
  cout << ans << '\n';
  now = 0;
  for (int i = 1; i <= 1000000 && now < ans; i++) {
    for (int j = 0; j < 5 && now < ans; j++) {
      sz = (int)rec[i][j].size();
      for (int k = 1; k < sz && now < ans; k += 2) {
        now++;
        ans2[now][0] = rec[i][j][k - 1];
        ans2[now][1] = rec[i][j][k];
        rec[i][j][k] = rec[i][j][k - 1] = "";
      }
    }
  }
  now = 0;
  str = "";
  for (int i = 1; i <= 1000000 && now < ans; i++) {
    for (int j = 0; j < 5 && now < ans; j++) {
      sz = (int)rec[i][j].size();
      for (int k = 0; k < sz && now < ans; k++) {
        if (rec[i][j][k] == "") continue;
        if (str == "")
          str = rec[i][j][k];
        else {
          now++;
          ans1[now][0] = str;
          ans1[now][1] = rec[i][j][k];
          str = "";
        }
      }
    }
    str = "";
  }
  for (int i = 1; i <= ans; i++) {
    cout << ans1[i][0] << " " << ans2[i][0] << '\n';
    cout << ans1[i][1] << " " << ans2[i][1] << '\n';
  }
  return 0;
}
