#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 50;
string s[maxn];
int vow[maxn];
char la[maxn];
bool out[maxn];
int mat[maxn];
stack<int> st;
stack<int> st2;
void init(int n) {
  memset(vow, 0, sizeof(vow));
  memset(la, 1, sizeof(la));
  memset(out, 0, sizeof(out));
  memset(mat, -1, sizeof(mat));
  while (!st.empty()) st.pop();
  while (!st2.empty()) st2.pop();
}
void input(int n) {
  for (int i = 0; i < n; i++) {
    getline(cin, s[i]);
    for (int j = 0; j < s[i].size(); j++) {
      if (s[i][j] == 'a' || s[i][j] == 'e' || s[i][j] == 'i' ||
          s[i][j] == 'o' || s[i][j] == 'u') {
        vow[i]++;
        la[i] = s[i][j];
      }
    }
  }
}
void matchl(int n) {
  for (int i = 0; i < n; i++) {
    if (mat[i] == -1) {
      for (int j = i + 1; j < n; j++) {
        if (mat[j] == -1 && vow[j] == vow[i] && la[j] == la[i]) {
          mat[i] = j;
          mat[j] = i;
          st2.push(i);
          break;
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    if (mat[i] == -1) {
      for (int j = i + 1; j < n; j++) {
        if (mat[j] == -1 && vow[j] == vow[i]) {
          mat[i] = j;
          mat[j] = i;
          st.push(i);
          break;
        }
      }
    }
  }
}
int main() {
  int n;
  scanf("%d%*c", &n);
  init(n);
  input(n);
  matchl(n);
  int tail = st2.size();
  int head = st.size();
  int sum;
  if (tail > head) {
    sum = (tail + head) / 2;
    printf("%d\n", sum);
    for (int i = 0; i < sum; i++) {
      int tpt, tph;
      if (!st.empty()) {
        tph = st.top();
        st.pop();
        tpt = st2.top();
        st2.pop();
        cout << s[tph] << " " << s[tpt] << endl;
        cout << s[mat[tph]] << " " << s[mat[tpt]] << endl;
      } else {
        tph = st2.top();
        st2.pop();
        tpt = st2.top();
        st2.pop();
        cout << s[tph] << " " << s[tpt] << endl;
        cout << s[mat[tph]] << " " << s[mat[tpt]] << endl;
      }
    }
  } else {
    sum = tail;
    printf("%d\n", sum);
    for (int i = 0; i < sum; i++) {
      int topt = st2.top();
      st2.pop();
      int toph = st.top();
      st.pop();
      cout << s[toph] << " " << s[topt] << endl;
      cout << s[mat[toph]] << " " << s[mat[topt]] << endl;
    }
  }
}
