#include <bits/stdc++.h>
using namespace std;
int n;
char ch[1000100];
vector<string> vec[1000100];
int isVowel(char c) {
  if (c == 'i') return 1;
  if (c == 'o') return 1;
  if (c == 'u') return 1;
  if (c == 'a') return 1;
  if (c == 'e') return 1;
  return 0;
}
int myfunc(string f1, string f2) {
  int a = f1.length();
  int b = f2.length();
  char c1;
  char c2;
  for (int i = a - 1; i >= 0; i--) {
    if (isVowel(f1[i])) {
      c1 = f1[i];
      break;
    }
  }
  for (int i = b - 1; i >= 0; i--) {
    if (isVowel(f2[i])) {
      c2 = f2[i];
      break;
    }
  }
  return c1 < c2;
}
int getVowel() {
  int sum = 0;
  int m = strlen(ch);
  for (int i = 0; i < m; i++) {
    if (ch[i] == 'i')
      sum++;
    else if (ch[i] == 'o')
      sum++;
    else if (ch[i] == 'u')
      sum++;
    else if (ch[i] == 'e')
      sum++;
    else if (ch[i] == 'a')
      sum++;
  }
  return sum;
}
char getVowel(string str) {
  int a = str.length();
  for (int i = a - 1; i >= 0; i--) {
    if (isVowel(str[i])) {
      return str[i];
    }
  }
}
vector<string> A, B;
int getNext(int u, int v, char c) {
  for (int i = v; i < vec[u].size(); i++) {
    if (getVowel(vec[u][i]) != c) return i - 1;
  }
  return vec[u].size() - 1;
}
void printStr(string str) {
  int a = str.length();
  for (int i = 0; i < a; i++) printf("%c", str[i]);
  printf(" ");
}
void cal() {
  for (int i = 1; i <= 1000000; i++) {
    if (vec[i].size() == 0) continue;
    for (int j = 0; j < vec[i].size(); j++) {
      int idx = getNext(i, j, getVowel(vec[i][j]));
      int len = idx - j + 1;
      if (len % 2 == 0) {
        for (int l = j; l <= idx; l++) A.push_back(vec[i][l]);
      } else {
        for (int l = j; l < idx; l++) A.push_back(vec[i][l]);
        B.push_back(vec[i][idx]);
      }
      j = idx;
    }
    if (B.size() % 2 != 0) B.erase(B.end() - 1);
    vec[i].clear();
  }
  int ans = 0;
  for (int i = 1; i <= 1000000; i++) {
    if (A.size() < i * 2) break;
    int ex = A.size() - (i * 2);
    if (B.size() + ex < i * 2) break;
    ans = i;
  }
  printf("%d\n", ans);
  for (int i = ans * 2; i < A.size(); i++) {
    B.push_back(A[i]);
  }
  for (int i = 0; i < 2 * ans; i += 2) {
    printStr(B[i]);
    printStr(A[i]);
    printf("\n");
    printStr(B[i + 1]);
    printStr(A[i + 1]);
    printf("\n");
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%s", &ch);
    int uu = getVowel();
    string str(ch);
    vec[uu].push_back(str);
  }
  for (int i = 1; i <= 1000000; i++) {
    if (vec[i].size() == 0) continue;
    sort(vec[i].begin(), vec[i].end(), myfunc);
  }
  cal();
  return 0;
}
