# 这个题目不能用贡献法了(和子串分值对比),因为不能直接计算出来,而是需要通过循环,因为现在有相同的元素,所有相同的元素贡献为1
# 不相同的元素每一个贡献为1哦,因此这个题目用一个很妙的dp来解决
# 因为子串是连续的,所以可以用dp来做,dp[i]表示所有以i结尾字符串的结果
# 那么dp[i] = dp[i-1] + i-j (j表示最近的和i一样的字符的索引) 这个dp真的很妙呀,积累哦
s=input().strip()
l=len(s)
dp=[0 for i in range(l+1)]
loc=[0 for i in range(26)]
ans=0
for i in range(l):
x=ord(s[i])-ord('a')
dp[i+1]=dp[i]+(i+1-loc[x])
loc[x]=i+1
ans+=dp[i+1]
print(ans)