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
#include "cstdio"

#define S 200100
// #define D 1
#define lli long long int

char a[S];
char *p, *pp;
char c, cc;

lli f[S];
lli *q, *qq;

lli n, nn, r;

int main()
{
	scanf("%s", a);
	cc = 2;
	for(n=0, p=a, q=f; *p; ++p, ++n)
	{
		c = (*p == 'a' || *p == 'e' || *p == 'i' || *p == 'o' || *p == 'u' || *p == 'y') ? 1 : 0;
		#ifdef D
			printf("\t# i[%lld] = %c = %d\n", n, *p, c);
		#endif
		if(c != cc)
		{
			#ifdef D
				puts("\t# c != cc");
			#endif
			cc = c;
			pp = p;
		}
		else
		{
			#ifdef D
				printf("\t# c == cc: %d\n", (int)(p - pp));
			#endif
			if(p - pp > 1)
			{
				#ifdef D
					puts("\t# x3");
				#endif
				*q = n - 1;
				++q;
			}
		}
	}
	if(q==f)
	{
		puts("0");
		return 0;
	}
	*q = n - 1;
	++q;
	#ifdef D
		printf("\t# n=%lld; nn=%lld; |f|=%d\n", n, nn, (int)(q - f));
	#endif
	r = ((n * (n + 1)) >> 1) - (n << 1) + 1;
	// r = ((n * (n + 1)) >> 1);
	#ifdef D
		printf("\t# r=%lld\n", r);
	#endif
	for(nn = 0, qq = f; qq < q; ++qq)
	{
		n = *qq - nn + 1;
		#ifdef D
			printf("\t# r=%lld [%lld = <%lld : %lld>]\n", r, n, nn, *qq);
		#endif
		if(n > 2)
		{
			r -= ((n * (n + 1)) >> 1) - (n << 1) + 1;
			// r -= ((n * (n + 1)) >> 1);
		}
		nn = *qq;
	}
	#ifdef D
		printf("\t# %s => %lld\n", a, r);
	#endif
	printf("%lld\n", r);
	return 0;
}