//输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串中连续出现的字符片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。
//在判断时,应该忽略所有的标点和空格,且忽略大小写,但输出应该保留原样(在回文串的首部和尾部不要输出多余字符)。输出字符串长度不超
//过5000,且占据单独的一行。应该输出最长的回文串,如有多个,输出的起始位置靠左的。
//样例输入:Confuciuss say: Madam, I'm Adam.
//样例输出:Madam, I'm Adam
///
#if 0
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAXN 5000
char buf[MAXN],s[MAXN];
int main(void)
{
int n, m = 0,max = 0;
int i,j,k;
fgets(buf,sizeof(s),stdin);
n = strlen(buf);
for(i = 0; i <= n; i++)
{
if(isalpha(buf[i]))
{
s[m++] = toupper(buf[i]);
}
}
for(i = 0; i < m; i++)
{
for(j = i; j < m; j++)
{
int ok = 1;
for(k = i; k <= j; k++)
{
if(s[k] != s[i+j-k])
{
ok = 0;
}
}
if(ok && j-i+1 > max)
{
max = j-i+1;
}
}
}
printf("max = %d\n",max);
return 0;
}
#endif
#if 1
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAXN 5000
char buf[MAXN],s[MAXN];
int p[MAXN];
int main(void)
{
int n,m = 0,max = 0,x,y;
int i,j;
fgets(buf,sizeof(s),stdin);
n = strlen(buf);
for(i = 0; i < n; i++)
{
if(isalpha(buf[i]))
{
p[m] = i;
s[m++] = toupper(buf[i]);
}
}
for(i = 0; i < m; i++)
{
for(j = 0; i-j >=0 && i+j < m; j++)
{
if(s[i-j] != s[i+j])
{
break;
}
if(j*2+1 > max)
{
max = j*2+1;
x = p[i-j];
y = p[i+j];
}
}
for(j = 0; i-j >= 0 && i+j+1 <m; j++)
{
if(s[i-j] != s[i+j+1])
{
break;
}
if(j*2+2 > max)
{
max = j*2+2;
x = p[i-j];
y = p[i+j+1];
}
}
}
for(i = x; i <= y; i++)
{
printf("%c",buf[i]);
}
printf("\n");
return 0;
}
#endif