1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <map>
#include <set>
#include <vector>

using namespace std;

#define REP(i, n) for (int i = 0; i < (int)n; i++)
#define ST first
#define ND second
#define MP make_pair
#define PB push_back

typedef vector<int> VI;
typedef pair<int, int> PI;
typedef vector<PI> VPII;
typedef set<int> SI;
typedef long long LL;

#ifdef DEBUG
const bool debug = true;
#else
const bool debug = false;
#endif
int n, m, k, l, test = 1;
const int INF = 1000 * 1000 * 1000;
const int MAKSN = 1000 * 1000 + 13;  // UZUPElnic

int spol, sam;

string s;
string samo = "aeiouy";

bool isSam(char c) {
    return samo.find(c) != string::npos;
}


void readIn() {
    cin >> s;
    n = s.size();
}


void solve() {
    int kon = 0;
    long long ans = 0;
    for(int pocz = 0; pocz < n; pocz++) {

        while(kon < n && sam < 3 && spol < 3) {
            // cerr << pocz << " " << kon << " " << sam << " " << spol << "\n";
            if(isSam(s[kon])) {
                spol = 0;
                sam++;
            }
            else {
                sam = 0;
                spol++;
            }
            kon++;
        }

        if(sam >= 3 || spol >= 3){
        // cerr << pocz << " " << kon << " " << (n - kon + 1)<< "\n";
            ans += (n - kon + 1);
        }

        if(kon - pocz <= 3) {
            if(isSam(s[pocz])) {
                sam = max(0, sam-1);
            }
            else
               spol = max(0, spol-1);
        }
    }

    cout << ans << "\n";
}

void zeruj() {
    spol = sam = 0;
}

int main() {
    ios_base::sync_with_stdio(0);
    zeruj();
    readIn();
    solve();
    return 0;
}