#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
long long int dx[] = {0, 1, 0, -1, -1, 1, -1, 1};
long long int dy[] = {-1, 0, 1, 0, -1, 1, 1, -1};
const long long int MAXN = 2e6 + 5;
const long long int N = 1e5 + 5;
long long int n, m;
long long int binpow(long long int n, long long int p) {
  long long int res = 1;
  while (p > 0) {
    if (p & 1) res = res * n;
    n = n * n;
    p >>= 1;
  }
  return res;
}
long long int power(long long int n, long long int p) {
  long long int res = 1;
  n %= 1000000007;
  while (p > 0) {
    if (p & 1) res = (res * n) % 1000000007;
    n = (n * n) % 1000000007;
    p >>= 1;
  }
  return res;
}
long long int modInverse(long long int n, long long int p) {
  return power(n, p - 2);
}
long long int fact[MAXN], inv[MAXN], invfact[MAXN];
void initFactorials() {
  fact[0] = 1;
  for (long long int i = 1; i < MAXN; i++) {
    fact[i] = (fact[i - 1] * i * 1LL) % 1000000007;
  }
  inv[1] = 1;
  for (long long int i = 2; i < MAXN; i++)
    inv[i] = inv[1000000007 % i] * (1000000007 - 1000000007 / i) % 1000000007;
  invfact[0] = 1;
  for (long long int i = 1; i < MAXN; i++)
    invfact[i] = (invfact[i - 1] * inv[i]) % 1000000007;
}
long long int nCrMod(long long int n, long long int r) {
  if (n < r) return 0;
  if (r == 0) return 1;
  long long int num = fact[n], den = (fact[r] * fact[n - r]) % 1000000007;
  long long int inv = modInverse(den, 1000000007);
  return (num * inv) % 1000000007;
}
string s;
vector<long long int> res;
long long int mx = 1000111000111000111LL;
bool isVowel(char c) {
  return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');
}
void go(long long int pos, long long int cnt, vector<long long int> temp) {
  if (pos >= n) {
    if (temp.size() < mx) {
      mx = temp.size();
      res = temp;
    }
    return;
  }
  if (isVowel(s[pos])) {
    return go(pos + 1, 0, temp);
  }
  if (cnt == 2) {
    temp.push_back(pos);
    go(pos, 0, temp);
  } else if (cnt == 1) {
    temp.push_back(pos);
    go(pos, 0, temp);
    temp.pop_back();
    go(pos + 1, cnt + 1, temp);
  } else {
    go(pos + 1, cnt + 1, temp);
  }
}
void solve() {
  cin >> s;
  n = s.size();
  string temp;
  long long int constant = 0, consecutive = 0;
  temp = s[0];
  if (!isVowel(s[0])) constant = 1, consecutive = 1;
  for (long long int i = 1; i < n; i++) {
    if (isVowel(s[i])) {
      consecutive = 0;
      constant = 0;
      temp += s[i];
      continue;
    }
    if (consecutive >= 3) {
      if (!isVowel(s[i]) && s[i] != s[i - 1]) {
        cout << temp << " ";
        temp = s[i];
        consecutive = 1;
        constant = 1;
        continue;
      }
    }
    if (!isVowel(s[i]) && s[i] == s[i - 1]) {
      consecutive++;
    } else {
      consecutive = 1;
    }
    if (!isVowel(s[i])) {
      constant++;
    }
    if (consecutive >= 3) {
      temp += s[i];
      constant = 0;
      continue;
    }
    if (constant == 3) {
      cout << temp << " ";
      temp = s[i];
      constant = 1;
    } else {
      temp += s[i];
    }
  }
  cout << temp << "\n";
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int t = 1;
  while (t--) {
    solve();
  }
}
