#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 + 5;
string s;
long long prefix[MaxN][30],ans=0,m;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
if(fopen("B2.inp","r"))
{
freopen("B2.inp","r",stdin);
freopen("B2.out","w",stdout);
}
cin >> s;
m=s.size();
s=" " + s;
for (long long i=1; i<=m; i++)
{
for (long long j=1; j<=26;j++)
{
prefix[i][j]=prefix[i-1][j];
if(j==s[i]-'a'+1)
{
prefix[i][j]++;
}
}
}
for (long long len =1; len<=m/2; len++)
{
for (long long l=1; l+2*len-1<=m; l++)
{
bool check = true;
for (long long i=1; i<=26; i++)
{
long long t_1=prefix[l+len-1][i]-prefix[l-1][i];
long long t_2=prefix[l+2*len-1][i]-prefix[l+len-1][i];
if(!((t_1>0&&t_2>0)||(t_1==0&&t_2==0)))
{
check = false;
}
}
if(check)
{
ans++;
}
}
}
cout << ans;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIE1heE4gPSAxZTUgKyA1OwpzdHJpbmcgczsKbG9uZyBsb25nIHByZWZpeFtNYXhOXVszMF0sYW5zPTAsbTsKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGlmKGZvcGVuKCJCMi5pbnAiLCJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiQjIuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIkIyLm91dCIsInciLHN0ZG91dCk7CiAgICB9CiAgICBjaW4gPj4gczsKICAgIG09cy5zaXplKCk7CiAgICBzPSIgIiArIHM7CiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PW07IGkrKykKICAgIHsKICAgICAgICBmb3IgKGxvbmcgbG9uZyBqPTE7IGo8PTI2O2orKykKICAgICAgICB7CiAgICAgICAgICAgIHByZWZpeFtpXVtqXT1wcmVmaXhbaS0xXVtqXTsKICAgICAgICAgICAgaWYoaj09c1tpXS0nYScrMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcHJlZml4W2ldW2pdKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IgKGxvbmcgbG9uZyBsZW4gPTE7IGxlbjw9bS8yOyBsZW4rKykKICAgIHsKICAgICAgICBmb3IgKGxvbmcgbG9uZyBsPTE7IGwrMipsZW4tMTw9bTsgbCsrKQogICAgICAgIHsKICAgICAgICAgICAgYm9vbCBjaGVjayA9IHRydWU7CiAgICAgICAgICAgIGZvciAobG9uZyBsb25nIGk9MTsgaTw9MjY7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbG9uZyBsb25nIHRfMT1wcmVmaXhbbCtsZW4tMV1baV0tcHJlZml4W2wtMV1baV07CiAgICAgICAgICAgICAgICBsb25nIGxvbmcgdF8yPXByZWZpeFtsKzIqbGVuLTFdW2ldLXByZWZpeFtsK2xlbi0xXVtpXTsKICAgICAgICAgICAgICAgIGlmKCEoKHRfMT4wJiZ0XzI+MCl8fCh0XzE9PTAmJnRfMj09MCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNoZWNrID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoY2hlY2spCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFucysrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnM7Cn0K