from functools import cache import sys sys.setrecursionlimit(10**6) def rolling_hash(s: str): """[l, r] のハッシュを返す関数を返す""" mod = 998244353 p = 1009 n = len(s) t = [ord(c) for c in s] a = [0] * n b = [0] * n a[0] = t[0] b[0] = 1 for i in range(1, n): a[i] = (a[i-1] * p + t[i]) % mod b[i] = (p * b[i-1]) % mod # [l, r] のハッシュ値 def f(l: int, r: int) -> int: assert 0 <= l <= r < n h = a[r] if l > 0: h -= a[l-1] * b[r-l+1] h %= mod return h return f class PalindromeRH: def __init__(self, s: str): self.n = len(s) self.h = rolling_hash(s) self.rh = rolling_hash(s[::-1]) def query(self, l: int, r: int) -> bool: """区間 [l, r] が回文か""" n = self.n return self.h(l, r) == self.rh(n-r-1, n-l-1) S = input() n = len(S) pal = PalindromeRH(S) dp = [0] * n for i in range(1, n): for j in range(i): if pal.query(0, j) and pal.query(j+1, i): dp[i] += 1 ans = 0 for i in range(n): if dp[i] == 0: continue for j in range(i+2, n): if pal.query(j, n-1): ans += dp[i] print(ans)