#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();     }   }