#include <bits/stdc++.h>
using namespace std;
char s[6000000];
int dp[6000000];
int d1[6000000];
int d2[6000000];
int n;
void calc() {
  int l = 0, r = -1;
  d1[0] = 1;
  for (int i = 1; i < n; ++i) {
    int k = (i > r ? 0 : min(d1[l + r - i], r - i)) + 1;
    while (i + k < n && i - k >= 0 && s[i + k] == s[i - k]) ++k;
    d1[i] = --k;
    if (i + k > r) l = i - k, r = i + k;
  }
  l = 0, r = -1;
  if (s[0] == s[1]) d2[0] = 1;
  for (int i = 1; i < n; ++i) {
    int k = (i > r ? 0 : min(d2[l + r - i + 1], r - i + 1)) + 1;
    while (i + k - 1 < n && i - k >= 0 && s[i + k - 1] == s[i - k]) ++k;
    d2[i] = --k;
    if (i + k - 1 > r) l = i - k, r = i + k - 1;
  }
}
int pr[6000000];
int main() {
  gets(s);
  n = strlen(s);
  calc();
  long long res = 0;
  dp[0] = 1;
  for (int i = 1; i < n; i++) {
    if (d1[i] == i) pr[i + i + 1] = 1;
    if (d2[i] == i) pr[i + i] = 1;
  }
  pr[0] = 1;
  pr[1] = 1;
  dp[1] = 1;
  for (int i = 2; i <= n; i++)
    if (pr[i]) dp[i] = dp[i / 2] + 1;
  for (int i = 1; i <= n; i++) res += (long long)(dp[i]);
  cout << res << endl;
  return 0;
}
