#include <bits/stdc++.h>
using namespace std;
const int N = 5e6 + 10;
string s;
int d1[N];
int d2[N];
int n, sp[N];
void manacher() {
  int l = 0, r = -1;
  for (int i = 0; i < n; i++) {
    int k = i > r ? 1 : min(d1[l + r - i], r - i);
    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;
  for (int i = 0; i < n; i++) {
    int k = i > r ? 0 : min(d2[l + r - i + 1], r - i + 1);
    k++;
    while (i + k <= 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 main() {
  ios::sync_with_stdio(false);
  cin >> s;
  n = s.length();
  manacher();
  long long res = 1;
  sp[0] = 1;
  for (int i = 1; i <= n; i++) {
    if (~i & 1 && d1[i / 2] - 1 == i / 2)
      sp[i] = sp[i / 2 - 1] + 1, res += sp[i];
    else if (i & 1 && d2[(i + 1) / 2] == (i + 1) / 2)
      sp[i] = sp[(i + 1) / 2 - 1] + 1, res += sp[i];
  }
  cout << res << endl;
}
