#include <iostream>
#include <string.h>
//#include <iomanip.h>

using namespace std;

const int MAXLEN = 1000000;

char s[MAXLEN];
int z[MAXLEN];
int n;

//используем z-алгоритм из Гасфилда
void makeZ(void)
{

  int l=0, r=0;
  z[0]=0;
  for(int k=1;k<n;k++)
  {
    
    if (k>r)
    {
      l=r=k;
      while ( (r<n) && (s[r]==s[r-k]) ) r++;
      r--;
      z[k] = r-k+1;
    }
    
    else

    {
      z[k] = z[k-l];
      int r1 = k+z[k];
      if (r1<=r) continue;
      r1 = r+1;
      while ((r1<n) && (s[r1]==s[r1-k]) ) r1++;
      r1--;
      z[k] = r1-k+1;
      if (r1>r)
      {
        r = r1; l=k;
      }
    }

  }

}

int main(void)
{
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
  cin >> s;
  n = strlen(s);

  makeZ();

  //идем слева направо и ищем число, которое будет равно длине оставшейся строки
  for(int i=1; i<n; i++)
    if (z[i] == n - i)
    {
      if (i*2>n) cout << "0" << endl; else cout << i << endl;
      return 0;
    }

  cout << "0" << endl;
  return 0;
}
