#include <bits/stdc++.h>
using namespace std;
const char c[5] = {'u', 'e', 'o', 'a', 'i'};
const int N = 1e5 + 1;
string s[N];
bool Mark[N], used[N];
vector<pair<int, int> > F[N], U, V, G;
int n;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < 5; i++) {
    Mark[c[i]] = true;
  }
  for (int i = 1; i <= n; i++) {
    cin >> s[i];
    int cnt = 0;
    char t;
    for (int j = 0; j < s[i].size(); j++) {
      if (Mark[s[i][j]]) {
        cnt++;
        t = s[i][j];
      }
    }
    F[t].push_back(pair<int, int>(cnt, i));
  }
  for (int i = 0; i < 5; i++) {
    char t = c[i];
    sort(F[t].begin(), F[t].end());
    for (int i = 0; i < F[t].size(); i++) {
      used[i] = false;
    }
    for (int i = 1; i < F[t].size(); i++) {
      if (F[t][i].first == F[t][i - 1].first) {
        V.push_back(pair<int, int>(F[t][i].second, F[t][i - 1].second));
        used[i] = used[i - 1] = true;
        i++;
      }
    }
    for (int i = 0; i < F[t].size(); i++) {
      if (!used[i]) G.push_back(F[t][i]);
    }
  }
  sort(G.begin(), G.end());
  for (int i = 1; i < G.size(); i++) {
    if (G[i].first == G[i - 1].first) {
      U.push_back(pair<int, int>(G[i].second, G[i - 1].second));
      i++;
    }
  }
  while (V.size() > U.size()) {
    U.push_back(V.back());
    V.pop_back();
  }
  cout << V.size() << '\n';
  for (int i = 0; i < V.size(); i++) {
    cout << s[U[i].first] << ' ' << s[V[i].first] << '\n';
    cout << s[U[i].second] << ' ' << s[V[i].second] << '\n';
  }
}
