# 暴力 只过一半超时 ,满分思路是计算每个字符对整个值的贡献度
import sys
import os
if __name__ == '__main__':
S = input()
lenth = len(S)
res = lenth
for i in range(0,lenth):
tmp = S[i]
count = 1
for j in range(2,lenth-i+1):
tmp2 = S[i:i+j]
new = S[i+j-1]
if tmp.count(new)==0:
count +=1
elif tmp.count(new)==1:
count -=1
res+=count
tmp = tmp2
print(res)
# 真的读题,然后思路清晰后再动手
import os
import sys
"""
在纸上画一下它们的父子关系图,画成一个二叉树的形式,要得到的种子作为根节点,其他的作为子节点
这样可以形成明显的层次关系,在每一层找到最大的时间,然后把这些最大的时间相加就能得到最终的最短时间
"""
N, M, K, T = map(int, input().split())
growtime = list(map(int, input().split()))
growtime.insert(0, 0) # 让编号和下标对应
existseed = list(map(int, input().split()))
relation = [list(map(int, input().split())) for i in range(K)]
"""定义一个列表用于存放种子的双亲,以及双亲培育出目标种子的时间"""
parent = [[] for i in range(N + 1)]
for elem in relation:
"""能生成种子t的双亲可能不知2个,也可能4个,8个...."""
a = [elem[0],elem[1],max(growtime[elem[0]],growtime[elem[1]])]
parent[elem[2]].append(a)
"""定义一个存放得到各个种子最短时间的数组"""
dp = [float('inf') for i in range(N + 1)] # 编号和下标对应
for i in existseed: # 已经拥有的种子生成时间是0
dp[i] = 0
def dns(t): # t:种子编号是t
"""计算培育出t号种子的最短时间"""
if dp[t] != float('inf'): # 如果t号种子不等于无穷大,就已经求出t号种子的最短时间了
return dp[t]
"""如果还没有求出来,就是t号种子的双亲培育t号的时间+培育t号双亲的时间"""
for item in parent[t]:
dp[t] = min(dp[t],max(dns(item[0]),dns(item[1]))+item[2])
return dp[t]
print(dns(T))