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
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <cstdio>
#include <string>

using namespace std;

typedef unsigned short int us;
typedef long long int lli;
typedef char c;

bool sprawdz(string n);

#define REP(x, y, z) for(us z = x; z < y; z++)
#define REPE(x, y, z) for(us z = x; z <= y; z++)

char samogloski[7] = { 'a', 'o', 'e', 'i', 'u', 'y' };

int main()
{
	ios_base::sync_with_stdio(0);

	string napis, bufor;
	cin >> napis;

	if (napis.length() <= 2)
		cout << 0;

	else
	{
		bool* trojka = new bool[napis.length()];
		us* odleglosc = new us[napis.length()];

		REP(0, napis.length(), i)
		{
			trojka[i] = false;
			odleglosc[i] = 0;
		}

		REP(0, napis.length() - 2, i)
		{
			bufor = "";
			bufor += napis[i];
			bufor += napis[i + 1];
			bufor += napis[i + 2];

			if (sprawdz(bufor))
				trojka[i] = true;
		}

		us dlugosc = 0;
		bool first_lap = true;

		REP(0, napis.length() - 2, i)
		{
			if (trojka[i] && first_lap)
			{
				odleglosc[i] = 0;
				dlugosc = 1;
				first_lap = false;
			}

			else if (trojka[i])
			{
				odleglosc[i] = dlugosc;
				dlugosc = 1;
			}

			else
				++dlugosc;
		}

		lli wynik = 0;
		first_lap = true;

		REP(0, napis.length() - 2, i)
		{
			if (trojka[i] && first_lap)
			{
				wynik += ((i + 1) * (napis.length() - (i + 2) - 1 + 1));
				first_lap = false;
			}

			else if (trojka[i])
				wynik += (odleglosc[i] * (napis.length() - (i + 2) - 1 + 1));
		}

		cout << wynik;
	}
}

bool sprawdz(string n)
{
	bool pierwsza = false, druga = false, trzecia = false;
	//true - samogloska false = spolgloska

	REP(0, 7, i)
		if (n[0] == samogloski[i])
			pierwsza = true;

	REP(0, 7, i)
		if (n[1] == samogloski[i])
			druga = true;

	if (pierwsza != druga)
		return 0;

	REP(0, 7, i)
		if (n[2] == samogloski[i])
			trzecia = true;

	if (druga != trzecia)
		return 0;

	else
		return 1;
}