#include <iostream>
#include <string>
using namespace std;
struct data
{
int hv_1;
int hv_A;
int hv_a;
} typedef data;
data pass[1000006];
int check_safe (int begin, int end)
{
int num_1=pass[end].hv_1-pass[begin-1].hv_1;
int num_a=pass[end].hv_a-pass[begin-1].hv_a;
int num_A=pass[end].hv_A-pass[begin-1].hv_A;
if (num_1>0 && num_a>0 && num_A>0 && end-begin+1>=6) return 1;
else return 0;
}
int BSearch (int begin, int front, int back)
{
int vt=-1;
while (front<=back && back-begin+1>=6)
{
int mid = (front+back)/2;
if (check_safe (begin, mid)==1)
{
vt=mid;
back=mid-1;
}
else front=mid+1;
}
return vt;
}
int main ()
{
string xau;
cin>>xau;
pass[0].hv_1=0;
pass[0].hv_a=0;
pass[0].hv_A=0;
int n=xau.length();
for (int i=1; i<=n; i++)
{
if (xau[i-1]>='0' && xau[i-1]<='9')
{
pass[i] = pass[i-1];
pass[i].hv_1++;
}
else if (xau[i-1]>='a' && xau[i-1]<='z')
{
pass[i] = pass[i-1];
pass[i].hv_a++;
}
else if (xau[i-1]>='A' && xau[i-1]<='Z')
{
pass[i] = pass[i-1];
pass[i].hv_A++;
}
}
long long count=0;
for (int i=1; i<=xau.length()-6+1; i++)
{
int VT = BSearch (i, i, n);
if (VT!=-1)
{
count+=n-VT+1;
} else break;
}
cout<<count;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGRhdGEKewoJaW50IGh2XzE7CglpbnQgaHZfQTsKCWludCBodl9hOwp9IHR5cGVkZWYgZGF0YTsKCmRhdGEgcGFzc1sxMDAwMDA2XTsKCmludCBjaGVja19zYWZlIChpbnQgYmVnaW4sIGludCBlbmQpCnsKCWludCBudW1fMT1wYXNzW2VuZF0uaHZfMS1wYXNzW2JlZ2luLTFdLmh2XzE7CglpbnQgbnVtX2E9cGFzc1tlbmRdLmh2X2EtcGFzc1tiZWdpbi0xXS5odl9hOwoJaW50IG51bV9BPXBhc3NbZW5kXS5odl9BLXBhc3NbYmVnaW4tMV0uaHZfQTsKCWlmIChudW1fMT4wICYmIG51bV9hPjAgJiYgbnVtX0E+MCAmJiBlbmQtYmVnaW4rMT49NikgcmV0dXJuIDE7CgllbHNlIHJldHVybiAwOwp9CgppbnQgQlNlYXJjaCAoaW50IGJlZ2luLCBpbnQgZnJvbnQsIGludCBiYWNrKQp7CglpbnQgdnQ9LTE7Cgl3aGlsZSAoZnJvbnQ8PWJhY2sgJiYgYmFjay1iZWdpbisxPj02KQoJewoJCWludCBtaWQgPSAoZnJvbnQrYmFjaykvMjsKCQlpZiAoY2hlY2tfc2FmZSAoYmVnaW4sIG1pZCk9PTEpCgkJewoJCQl2dD1taWQ7CgkJCWJhY2s9bWlkLTE7CgkJfQoJCWVsc2UgZnJvbnQ9bWlkKzE7Cgl9CglyZXR1cm4gdnQ7Cn0KCmludCBtYWluICgpCnsKCXN0cmluZyB4YXU7CgljaW4+PnhhdTsKCXBhc3NbMF0uaHZfMT0wOwoJcGFzc1swXS5odl9hPTA7CglwYXNzWzBdLmh2X0E9MDsKCWludCBuPXhhdS5sZW5ndGgoKTsKCWZvciAoaW50IGk9MTsgaTw9bjsgaSsrKQoJewoJCWlmICh4YXVbaS0xXT49JzAnICYmIHhhdVtpLTFdPD0nOScpCgkJewoJCQlwYXNzW2ldID0gcGFzc1tpLTFdOwoJCQlwYXNzW2ldLmh2XzErKzsKCQl9CgkJZWxzZSBpZiAoeGF1W2ktMV0+PSdhJyAmJiB4YXVbaS0xXTw9J3onKQoJCXsKCQkJcGFzc1tpXSA9IHBhc3NbaS0xXTsKCQkJcGFzc1tpXS5odl9hKys7CgkJfQoJCWVsc2UgaWYgKHhhdVtpLTFdPj0nQScgJiYgeGF1W2ktMV08PSdaJykKCQl7CgkJCXBhc3NbaV0gPSBwYXNzW2ktMV07CgkJCXBhc3NbaV0uaHZfQSsrOwoJCX0KCX0KCWxvbmcgbG9uZyBjb3VudD0wOwoJZm9yIChpbnQgaT0xOyBpPD14YXUubGVuZ3RoKCktNisxOyBpKyspCgl7CgkJaW50IFZUID0gQlNlYXJjaCAoaSwgaSwgbik7CgkJaWYgKFZUIT0tMSkKCQl7CgkJCWNvdW50Kz1uLVZUKzE7CgkJfSBlbHNlIGJyZWFrOwoJfQoJY291dDw8Y291bnQ7CglyZXR1cm4gMDsKfQ==