S = list(map(lambda x:ord(x), input())) S_ = S[::-1] n = len(S) if n==1: print(1) exit() mod = 10**9+7 p = 1007 mod2 = 2222222227727 def transform(S): A = [0]*n t = 0 p_ = 1 for i, s in enumerate(S): t += p_*s t %= mod2 A[i] = t p_ *= p p_ %= mod2 return A SR = transform(S) SR_ = transform(S_) G = [set() for _ in range(n//2+1)] dp = [0]*(n//2+1) # print(SR) pp = pow(p, mod2-2, mod2) for i in range(n//2): x = pow(pp, n-1-2*i, mod2) for j in range(i, n//2): if (SR[j]-(SR[i-1] if i-1>=0 else 0))%mod2==(SR[~i]-SR[~(j+1)])*x%mod2: G[i].add(j+1) x *= p x %= mod2 # print(G) dp[0] = 1 ans = 0 for i in range(n//2+1): ans += dp[i] ans %= mod for v in G[i]: dp[v] += dp[i] dp[v] %= mod print(ans)