#include <bits/stdc++.h>
using namespace std;
map<int, vector<pair<string, char>>> mp;
bool vowel(char x) {
  if (x == 'a' or x == 'e' or x == 'i' or x == 'o' or x == 'u') return true;
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    int cnt = 0;
    char c = '-';
    for (auto x : s)
      if (x == 'a' or x == 'e' or x == 'i' or x == 'o' or x == 'u')
        cnt++, c = x;
    if (mp.find(cnt) == mp.end()) {
      vector<pair<string, char>> temp;
      mp[cnt] = temp;
    }
    mp[cnt].push_back({s, c});
  }
  vector<pair<string, string>> first, second;
  for (auto &x : mp) {
    int len = x.first;
    string check[26];
    fill(check, check + 26, "");
    string other = "";
    for (auto &y : x.second) {
      if (check[y.second - 97] != "") {
        second.push_back({check[y.second - 97], y.first});
        check[y.second - 97] = "";
      } else if (check[y.second - 97] == "") {
        check[y.second - 97] = y.first;
      }
    }
    for (auto &k : check) {
      if (k == "") continue;
      if (other == "")
        other = k;
      else {
        first.push_back({other, k});
        other = "";
      }
    }
  }
  vector<pair<string, string>> out;
  int i = 0, j = 0;
  while (j < second.size()) {
    if (i < first.size()) {
      out.push_back({first[i].first, second[i].first});
      out.push_back({first[i].second, second[i].second});
      i++, j++;
    } else if (j < second.size() - 1) {
      out.push_back({second[j].first, second[j + 1].first});
      out.push_back({second[j].second, second[j + 1].second});
      j += 2;
    } else
      break;
  }
  cout << out.size() / 2 << '\n';
  for (auto &x : out) cout << x.first << " " << x.second << '\n';
  return 0;
}
