模板
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN=1e6+10;
char str[MAXN];
int p[2*MAXN];
char snew[2*MAXN];
int Init()
{
int len=strlen(str);
snew[0]='$';
snew[1]='#';
int j=2;
for(int i=0;i<len;i++)
{
snew[j++]=str[i];
snew[j++]='#';
}
snew[j]='\0';
return j;
}
int Manacher()
{
int len=Init();int id = 0;int mx = 0;int maxLen = -1;
for(int i=1;i<len;i++)
{
p[i] = i < mx ? min(p[2*id-i],mx-i) : 1;
while(snew[i-p[i]] == snew[i+p[i]]) p[i]++;
if(p[i]+i > mx)
{
mx = p[i] + i;
id = i;
}
maxLen = max(maxLen,p[i]-1);
}
return maxLen;
}
int main()
{
int kace=1;
while(~scanf("%s",str)&&str[0]!='E')
{
printf("Case %d: %d\n",kace++,Manacher());
}
return 0;
}