int cell[20][20];//total simulation array
struct cell_q
{
	int px,py,num;
} queue[10000];

void Grow(int px,int py,int num)
{
	cell[px][py]+=num;
	cell[px-1][py]+=num;
	cell[px+1][py]+=num;
	cell[px][py-1]+=num;
	cell[px][py+1]+=num;
	cell[px-1][py-1]+=num;
	cell[px-1][py+1]+=num;
	cell[px+1][py-1]+=num;
	cell[px+1][py+1]+=num;
	return;
}

int main()
{
	int n,m,x,y,d;
	cin>>m>>n;
	cell[5][5]=m;
	int head=0,tail=0;
	for(d=1;d<=n;d++)
	{
		for(x=1;x<=9;x++)
		{
			for(y=1;y<=9;y++)
			{
				if(cell[x][y]!=0)
				{
					queue[tail].px=x;
					queue[tail].py=y;
					queue[tail].num=cell[x][y];
					tail++;//Stand by for growth
				}
			}
		}
		while(head<tail)
		{
			Grow(queue[head].px,queue[head].py,queue[head].num);
			head++;
		}
	}
	for(x=1;x<=9;x++)
	{
		for(y=1;y<=8;y++)
		{
			cout<<cell[x][y]<<' ';
		}
		cout<<cell[x][9]<<endl;
	}
	return 0;
}


int bottle[9][9]={0};
int totalday=0;
void mutiply(int day);
int main()
{
	cin>>bottle[4][4];
	int day;
	cin>>totalday;
	mutiply(1);
	for(int i=0;i<=8;i++)
	{   cout<<bottle[i][0];
		for(int j=1;j<=8;j++)
		{
			cout<<' '<<bottle[i][j];
		}
		cout<<endl;
	}
}
void mutiply(int day)
{
	if(day==totalday+1)
		return ;
	int board[9][9]={0};
	for(int i=1;i<=7;i++)
		for(int j=1;j<=7;j++)
		{
			board[i][j]=board[i][j]+bottle[i][j]*2;
			board[i-1][j]=board[i-1][j]+bottle[i][j];
			board[i+1][j]=board[i+1][j]+bottle[i][j];
			board[i][j-1]=board[i][j-1]+bottle[i][j];
			board[i][j+1]=board[i][j+1]+bottle[i][j];
			board[i-1][j-1]=board[i-1][j-1]+bottle[i][j];
			board[i-1][j+1]=board[i-1][j+1]+bottle[i][j];
			board[i+1][j-1]=board[i+1][j-1]+bottle[i][j];
			board[i+1][j+1]=board[i+1][j+1]+bottle[i][j];
		}
	for(int i=0;i<=8;i++)
		for(int j=0;j<=8;j++)
		{
			bottle[i][j]=board[i][j];
		}
	mutiply(day+1);
}


const int Length = 9;
int board[Length][Length] = {0};
void f(int m, int n)
{
	int i,j;
	int temp[Length][Length] = {0};
	if(n == 0) board[4][4] = m;
	else
	{
		f(m,n-1);
		for(i=0;i<Length;i++)
		{
			for(j=0;j<Length;j++)
			{
				temp[i][j] = board[i][j];
				board[i][j] = 0;
			}
		}
		for(i = 0; i<Length ; i++)
		{
			for(j = 0; j<Length ;j++)
			{
				if(temp[i][j] != 0)
				{
					board[i][j] += temp[i][j] *2;
					board[i+1][j]+= temp[i][j];
					board[i-1][j]+= temp[i][j];
					board[i][j+1]+= temp[i][j];
					board[i][j-1]+= temp[i][j];
					board[i-1][j-1]+= temp[i][j];
					board[i+1][j+1]+= temp[i][j];
					board[i-1][j+1]+= temp[i][j];
					board[i+1][j-1]+= temp[i][j];
				}
			}
		}
	}
}
int main()
{
	int m,n,i,j;
	cin>>m>>n;
	f(m,n);
	for(i=0;i<Length;i++)
	{
		for(j=0;j<Length-1;j++)
		{
			cout<<board[i][j]<<" ";
		}
		cout<<board[i][Length-1]<<endl;
	}
	return 0;
}


/*
 * huiwenzilie.cpp
 *
 *  Created on: 2010-12-19
 *      Author: lz
 */

int main()
{
	char c[600];
	cin>>c;
	int p;
	int q;
	int i;
	int j;
	int zilen;
	int len=strlen(c);
	for(zilen=2;zilen<=len;zilen++)//???????
		for(i=0;i<=len-zilen;i++)//???????????
		{
			p=i;//????????
			q=i+zilen-1;//????????
			while(p<q)//???????
			{
				if(c[p]==c[q])
				{
					p++;
					q--;
				}
				else
					break;
			}
			if(p>=q)
			{
				for(j=i;j<i+zilen;j++)
					cout<<c[j];
				cout<<endl;
			}
		}
	return 0;
}


void checkstr (char str[] , int) ;

int main ()
{
	char str[500] ;
	int  i = 2 , len ;
	cin >> str ;
	len = strlen(str) ;
	for (i = 2 ; i <= len ; i ++)
	{
	    checkstr(str , i) ;
	}
	return 0 ;
}
void checkstr (char str[] , int i)
{
	int b , e , b1 , b2 , e2 , count = 0 , len ;
	len = strlen(str) ;
	for (b = 0 ; b <= len - i ; b ++)
	{
		b2 = b ;
		e2 = b + i - 1 ;
		for ( b1 = b , e = b + i - 1; b1 < e ; b1 ++ , e --)
		{
			if (str[b1] == str[e])
				count ++ ;
		}
		if (count == i / 2)
		{
			for (b1 = b2 ; b1 <= e2 - 1; b1 ++)
			{
				cout << str[b1] ;
			}
			cout << str[e2] << endl ;
		}
		count = 0 ;
	}
}


int main()
{
	char a[500],temp[500],temp2[500];
	int i,k,j,b;
	gets(a);
	b=strlen(a);
	for(i=2;i<=b;i++)
	{
		for(j=0;j<b-i+1;j++)
		{
			strncpy(temp,&a[j],i);
			for(k=0;k<i;k++)
			{

				temp2[k]=temp[i-k-1];
			}
			temp[i]='\0';
			temp2[i]='\0';
			if(strcmp(temp,temp2)==0) printf("%s\n",temp);
		}
	}

}


char s[555];

int f(int i,int j)
{
	int k;
	if (j==2)
	{
		if (s[i]==s[i+1])
			return 1;
		else return 0;
	}
	else if (j==3)
	{
		if (s[i]==s[i+2])
			return 1;
		else return 0;
	}
	else
	{
		for (k=0;k<=j/2-1;k++)
			if (s[i+k]!=s[i+j-1-k])
				break;
		if (k==j/2)
			return 1;
		else return 0;
	}
}

int main()
{
	int i,j,k,len;

	gets(s);
	len=strlen(s);
	for (i=len;i>0;i--)
		s[i]=s[i-1];
	s[0]=0;

	for (j=2;j<=len;j++)
		for (i=1;i<=len+1-j;i++)
			if (f(i,j)==1)
			{
				for (k=i;k<i+j-1;k++)
					printf("%c",s[k]);
				printf("%c\n",s[i+j-1]);
			}

			return 0;
}


int i, b = 2;
char a[500] = {0};
int shuchu(char a[],int i)
{
	int s, j, k, l;
	for (j = 0; j < i; j++)
		if (a[j]==a[i])
		{
			if (i - j + 1 != b)
			continue;
			s = 1;
			for (k = 1; k < (i - j + 1) / 2; k++)
			{
				if ( a[j+k] != a[i-k] )
				{
					s = 0;
					break;
				}
			}
			if (s == 0)
				continue;
			if (s == 1)
			{
				for (l = j; l <= i; l++)
					cout << a[l];
				cout <<endl;
			}
		}
		return 0;
}

int main()
{
	cin >> a;
	for (b = 2; b <= 99; b++)
	for (i = 1; a[i] != 0; i++)
	{
		shuchu(a,i);
	}
	return 0;
}


int main()
{
	int i,j,k,t;
	char str[500]={"1"};
	gets(str);
	for(k=1;k<strlen(str)-1;k++)
	    for(i=0;i<strlen(str)-k;i++){
			t=0;
			for(j=0;j<(k+1)/2;j++){
				if(str[i+j]!=str[i+k-j]){t=1;break;}
			}
			if(t==0){
				for(j=i;j<=i+k;j++)
					printf("%c",str[j]);
				printf("\n");
			}
		}
	return 0;
}


int main()
{
	char str[520];
	int len, i, j, k, num;
    cin >> str;
	len = strlen(str);
	for (i = 2; i <= len; i++)
	{
		for (j = 0; j <= len - i; j++)
		{
			num = 0;
			for (k = 0; k < i; k++)
			{
				if (str[j + k] == str[j + i - k - 1])
					num++;
			}
			if (num == i)
			{
				for (k = 0; k < i; k++)
					cout << str[j + k];
				cout << endl;
			}
		}
	}
	return 0;
}


int main()
{
	char str[500];
	int i, j, k,len,l;
	cin.getline(str,500);

	len=strlen(str);

	for (i=2;i<=len;i++)
	{
		for (k=0;k<=len-i;k++)
		{
			for (j=k,l=i+k-1; j<i+k; j++,l--)
			{
				if (str[j] != str[l])
					break;
			}
			if (j==i+k)
			{
				for (j=k;j<i+k;j++)
					cout << str[j];
				cout << endl;
			}
		}
	}

	return 0;
}


int main()
{
	char str[500];
	int lenth,i,l,j,counter;
	gets(str);
	lenth=strlen(str);
	for(i=0;i<=lenth-2;i++)
	{
		if(str[i]==str[i+1])
			printf("%c%c\n",str[i],str[i+1]);
	}
	for(l=3;l<=lenth;l++)
	{
		for(i=0;i<=lenth-l;i++)
		{
			counter=0;
			for(j=0;j<=l-1;j++)
			{
				if(str[i+j]==str[i+l-j-1])
					counter+=1;
			}
			if(counter==l)
			{
				for(j=0;j<=l-2;j++)
				{
					printf("%c",str[i+j]);
				}
				printf("%c\n",str[i+l-1]);
			}
		}
	}
	return 0;
}


void sub(char common[],char minlen[],int n,int now)
{
	char *a,*b;
	for(a=common,b=minlen+now;a<common+n;a++,b++)
	{
		*a=*b;
	}
	*a='\0';
}
int compare(char a[],int n)
{
	int i,flag=1;
	for(i=0;i<strlen(a)/2;i++)
	{
		if(a[i]!=a[strlen(a)-i-1])
		{
			flag=0;
			break;
		}
	}
	return flag;
}
int main()
{
	void sub(char common[],char minlen[],int n,int now);
	int compare(char a[],int n);
	char str[500];
	scanf("%s",str);
	int i,j;
	if(strlen(str)>1)
	{
		for(i=2;i<=strlen(str);i++)
		{
			for(j=0;j<strlen(str)-i+1;j++)
			{
				char substr[500];
				sub(substr,str,i,j);
				if(compare(substr,i)==1)
				{
					printf("%s\n",substr);
				}
			}
		}
	}
	return 0;
}


int main()
{
	char c[505];
	cin >> c;
	int i, j, len;
	len = strlen(c);
	for (i = 2; i < len; i++)
	{
		for (j = 0; j <= len - i; j++)
		{
			int k, l, flag = 1;
			for (k = j, l = j + i - 1; k < j + i - 1, l > j; k++, l--)
			{
				if (c[k] != c[l])
				{
					flag = 0;
					break;
				}
			}
			if (flag == 1)
			{
				for (int a = j; a < j + i; a++)
					cout << c[a];
				cout << endl;
			}
		}
	}
	return 0;
}


int hw(char w[]){
int l=strlen(w);
for(int i=l>>1-1;i>=0;i--)
if(w[i]!=w[l-i-1])return 0;
return 1;
}
int main(){
char w[10000],p[10000];
cin>>w;
int l=strlen(w);
for(int j=2;j<l;j++)
for(int i=0;i<l-j+1;i++){
memcpy(&p,&w[i],j);
p[j]=0;
if(hw(p))cout<<p<<endl;
}
return 0;
}


int  main()
{
	char a[500];
	int len,i,j,k,p,flag,m;
	gets(a);
	len=strlen(a);
	for(i=2;i<=len;i=i+2)
	{
		for(j=0;j<len;j++)
		{
			flag=0;
			for(k=0;k<i/2;k++)
			{
				if(a[j+k]==a[j+i-1-k])
					flag=1;
				else {
					flag=0;break;
				}
			}
			if(flag)
			{
				for(m=j;m<j+i;m++)
					printf("%c",a[m]);
				printf("\n");
			}
		}
	}
return 0;
}


/*
 * huiwen.cpp
 *
 *  Created on: 2011-12-18
 *      Author: admin
 */
int main(){
	int i,begin,begin1,end1,flag,len,length;
	char a[501];
	cin>>a;
	length=strlen(a);
	for (len=2;len<=length;len++){//???????
		for (begin=0;begin<=length-len;begin++){//??????
			begin1=begin;end1=begin+len-1;
			flag=1;
			while(begin1<end1){//?????????????
				if (a[begin1]!=a[end1]){flag=0;break;}
				begin1++;end1--;
			}
			if (flag){
				for(i=begin;i<=begin+len-1;i++){//??????
					cout<<a[i];
				}
				cout<<endl;
			}
		}
	}
	return 0;
}


/*
 * 90.cpp
 *
 *  Created on: 2011-12-25
 *  ???????
 */

int main()
{
	char x[501];
	cin.getline(x,501);
	int n,i,j,k,p;
	int begin,end;
	p=strlen(x);
	for(n=2;n<=500;n++)
	{
		for(i=0,j=n-1;j<p;i++,j++)
		{
			begin=i;
			end=j;
			while(begin<end)
			{
				if(x[begin]!=x[end]) break;
				else
				{
					begin=begin+1;
				    end=end-1;
				}
			}
			if(begin>end)
			{
				for(k=i;k<=j;k++)
				{
					cout<<x[k];
				}
				cout<<endl;
			}
		}
	}
	return 0;
}


char c[500];
int f(int e0,int s0);
int main(){
	int i,j,k,e,s;

	scanf("%s",c);
	int len;
	len=strlen(c);
	for(i=0;i<len;i++){
		for(j=0;j<len;j++){
			if(j-i>=0&&i+j+1<=len){
				if(c[j-i]==c[i+j+1]){
					s=j-i;
					e=i+j+1;
					if(f(e,s)){
					for(k=s;k<=e;k++)
						printf("%c",c[k]);
					printf("\n");
					}
				}
			}
		}
	}
	return 0;
}
int f(int e0,int s0){
	int i0,sum=0;

	for(i0=s0;i0<=e0;i0++){
		if(c[i0]!=c[s0+e0-i0])
			sum++;
	}
	if(sum==0)
		return 1;
	else return 0;
}


void f1(char a[],int l)
{
	char b[501];
	int j;
	for (j=0;j<l;j++)
	{
		b[l-j-1]=a[j];
	}
	b[l]='\0';
	if (strcmp(a,b)==0)
		puts(a);
}
void f2(char s[],int l,int L)
{
	int m,n,i;
	char a[501];
	for(m=0;m<L-l+2;m++)
	{
		i=0;
		for(n=m;n<m+l;n++)
		{
			a[i]=s[n];
			i=i+1;
		}
		a[i]='\0';
		f1(a,l);
	}
}
void f3(char s[], int L)
{
	int l;
	for (l=2;l<L+1;l++)
		f2(s,l,L);
}
void main()
{
	char s[501];
	gets(s);
	int L;
	L=strlen(s);
	f3(s,L);
}


int print(char str[],int i,int j){
	int t,I=i,J=j;
	while(str[i]==str[j]&&j>=i){
		i++;
		j--;
	};
	if(j<i)
	{	for(t=I;t<=J;t++) printf("%c",str[t]);
		printf("\n");
	}
	return 0;
}
void main(){
	char str[501];
	int i,j,len;
	gets(str);
	len=strlen(str);
	for(i=1;i<len;i++)
		for(j=i;j<len;j++)
			print(str,j-i,j);
}


char ch[600],length;
void search(int x,int y,int z)
{
	int i;
	for(i=0;i<z;i++)
		if(ch[x-i]!=ch[y+i])return;
	for(i=x-z+1;i<=y+z-1;i++)
		cout<<ch[i];
	cout<<endl;
}
int main()
{
	int i,j,k;
	cin>>ch;
	length=strlen(ch);
	for(i=2;i<=length;i++)
	{
		for(j=(i-1)/2;j<=length-i/2-1;j++)
		{
			if(i%2==0)search(j,j+1,i/2);
			else search(j-1,j+1,i/2);
		}
	}
	return 0;
}


char substr(char s[], int start, int end)
{
     while ((end>start)&&(s[start]==s[end]))
     {
           start++; end--;
     }
     if(end>start) return 0;
     else return 1;
}

void osubstr(char s[], int start, int end)
{
     while(start<=end) putchar(s[start++]);
     putchar('\n');
}
int main ()
{
    char s[500];
    int m,n,len,width;
    gets(s);
    len=strlen(s);
    for(width=1; width<len; ++width)
    {
          for(m=0; m<=len-width;++m)
          {
                    if(substr(s,m,m+width)) osubstr(s,m,m+width);
          }
    }
    getchar();
    getchar();
    getchar();
}


int main() {
    char a[600];
    cin>>a;
    int l,i,j,start,num;
    char box1[600],box2[600];
    for(l=2;l<=strlen(a);l++)
    {
    	for(start=0;start<=strlen(a)-l;start++)
    	{
    		memset(box1,600,'\0');
    		    		memset(box2,600,'\0');
    		num=0;
    		for(i=start;i<start+l;i++)
    		{
    			box1[num++]=a[i];
    		}
    		for(i=0;i<l;i++)
    		{
    			box2[i]=box1[l-1-i];
    		}
    		for(i=0;i<l;i++)
    		{
    			if(box1[i]!=box2[i])
    				break;
                if(i==l-1)
                {
                	for(j=0;j<l;j++)
                	{
                		cout<<box1[j];
                	}
                	cout<<endl;
                }
    		}

    		memset(box1,600,'\0');
    		memset(box2,600,'\0');
    	}
    }
	return 0;
}


int main()
{
	int flag,i,n;
	char a[501],*j,*l,*r;
	cin>>a;n=strlen(a);
	for(i=1;i<n;i++)
	{
		for(j=a;*(j+i);j++)
		{
			flag=1;
			for(l=j,r=j+i;l<r;l++,r--)
				if(*l!=*r){flag=0;break;}
			if(flag)
			{
				for(l=j;l<=j+i;l++)cout<<*l;
				cout<<endl;
			}
		}
	}
	return 0;
}


char array[N];
int main()
{
	cin>>array;
	int len=strlen(array);
	for(int t=2; t<=len; t++)//?????????
	for(int i=0; i<=len-t; i++)
	{
		int sum=0;
		for(int j=0; j<t/2; j++)//?????????
		{
			if(array[i+j]==array[i+t-1-j]) sum++;
		}
		if(sum==t/2)//?
		{
			for(int j=i; j<i+t; j++)
			cout<<array[j];
			cout<<endl;
		}
	}
	return 0;
}


int ishuiwen(char c[510])
{
    int i,f=1;
    for(i=0;i<strlen(c);i++)
    {
                            if(c[i]!=c[strlen(c)-i-1])
                            {
                                                      f=0;
                                                      break;
                            }
    }
    return (f);
}

int main()
{
    char c[510],jilu[510];
    int  i,j,k;
    gets(c);
    for(i=2;i<=strlen(c);i++)
    {
                             for(j=0;j<=(strlen(c)-i);j++)
                             {
                                                          for(k=j;k<(j+i);k++)
                                                          {
                                                                              jilu[k-j]=c[k];
                                                          }
                                                          jilu[i]='\0';
                                                          if(ishuiwen(jilu))
                                                          printf("%s\n",jilu);
                             }
    }
    return 0;
}


void huiwen( int k ,char a[] )
{
	int i,shime = 1 ;
	for ( i = 0 ; i <= k / 2 ; i ++ )
		if ( a[i] != a[ k - i - 1 ] )
			shime = 0 ;
	if ( shime )
	{
		for ( i = 0 ; i < k ; i ++ )
			cout << a[i];
		cout << endl;
	}
}
int main ()
{
	char yuan[500],yiduan[500];
	int n,i,j,k ;
	cin >> yuan ;
	n = strlen ( yuan ) ;
	for ( k = 2 ; k <= n ; k = k + 2 )
	{
		for ( i = 0 ; i + k <= n ; i ++ )
		{
			for ( j = i ; j <= i + k ; j ++ )
				yiduan[j - i] = yuan[j] ;
			huiwen ( k , yiduan );
		}
	}
	return 0 ;
}


int main()
{
	char str[501]={'\0'};
	cin.getline(str,501);
	int i,j,k,n=0;
	for(n=0;str[n]!='\0';n++);

	for(i=1;i<n;i++)
	for(j=0;j<n-i;j++)
	{
		for(k=i;k>0;k--)
			if(str[j+i-k]!=str[j+k])
		    break;
		if(k==0)
		{
			for(k=j;k<=j+i;k++)
				cout<<str[k];
			cout<<endl;
		}
	}
	return 0;
}


int judge(char *p,int l)
{
	char *x,*t;
	t=p;
    int y=1;
	x=t+l-1;
	while ((t<=x) && y)
	{
		if (*t!=*x) y=0;
		t++;
		x--;
	}
	return y;
}
void pp(char *p,int l)
{
	int i;
	char *t;
	t=p;
	for (i=1;i<=l;i++)
		printf("%c",*(p+i-1));

printf("\n");
}
void main()
{
	char c[3243];
	int i,j,k,l;
	char *p;
	//freopen("tt.in","r",stdin);
	//freopen("tt.out","w",stdout);
	gets(c); l=strlen(c); p=c;
	for (i=2;i<=l;i++)

	 for (j=1;j<=l-i+1;j++)
         if (judge(p+j-1,i))
	    pp(p+j-1,i);

}


int main()
{
	char str[1000];
	int i, j, ii, jj, len, q;
	cin >> str;
	len = strlen(str);
	for (q = 2; q <= len; q++)
	{
	for (i = 1; str[i] != 0; i++)
	{
		ii = i;
		jj = i;
		if (str[i - 1] == str[i + 1])
		{
			while ((str[ii] == str[jj]) && (ii >= 0) && (str[jj] != 0))
			{
				if (ii != jj)
				{
					if (jj - ii + 1 == q){
					for (j = ii; j <= jj; j++)
						cout << str[j];
					cout << endl;}
				}
				ii --;
				jj ++;
			}
		}
		/*else
			if ((str[i - 1] == str[i]))
			{
				ii --;
				while ((str[ii] == str[jj]) && (ii >= 0) && (str[jj] != 0))
			{
				if (ii != jj)
				{
					for (j = ii; j <= jj; j++)
						cout << str[j];
					cout << endl;
				}
				ii --;
				jj ++;
			}
			}*/
			else
				if (str[i] == str[i + 1])
					{
				jj ++;
				while ((str[ii] == str[jj]) && (ii >= 0) && (str[jj] != 0))
			{
				if (ii != jj)
				{
					if (jj - ii + 1 == q)
					{
					for (j = ii; j <= jj; j++)
						cout << str[j];
					cout << endl;
					}
				}
				ii --;
				jj ++;
			}
			}
	}
	}
	return 0;
}


char b[505];
int check(){
	int i,len,j;
	len=strlen(b);
	for(i=0,j=len-1;i<j;i++,j--)
		if(b[i]!=b[j])return 0;
		return 1;
}
void main()
{
	char a[510];
	int i,j,k,len;
	gets(a);
	len=strlen(a);
	for(i=2;i<=len;i++){
		for(j=0;j<=len-i;j++){
			for(k=0;k<i;k++){
				b[k]=a[k+j];
			}
			b[k]=0;
			if(check())printf("%s\n",b);
		}
	}
}


int main()
{
   char p[501];
   scanf("%s",p);
   int len=strlen(p);
   for(int i=2;i<len;i++)
       {
       char **q=(char **)malloc(sizeof(char *)*len);
       for(int j=0;j<len-i+1;j++)
           {
               q[j]=(char *)malloc((i+1)*sizeof(char));
               for(int h=0;h<i+1;h++)
                   q[j][h]='\0';
               for(int h=0;h<i;h++)
                   q[j][h]=p[j+h];
           }
       for(int j=0;j<len-i+1;j++)
            {
            char temp[501]={'\0'};
            int k=0;
            for(int h=i-1;h>=0;h--)
                {
                temp[k]=q[j][h];
                k++;
                }
            if(strcmp(temp,q[j])==0)
               printf("%s\n",q[j]);
            }
       }
}


int main ()
{
	char str[505];
	int i, j, m, length, a[255][505] = {0}, flag = 0;
	cin.getline (str, 500);
	length = strlen(str);
	for (i = 0; i < length - 1; i++)
	{
		if (str[i] == str[i + 1])
		{
			a[0][i] = 1;
			j = 1;
			while (i + j + 1 < length && i - j >= 0)
			{
				if (str[i - j] == str[i + j + 1])
				{
					a[j][i] = 1;
					j++;
				}
				else
					break;
			}
		}
	}
	for (i = 0; i < length / 2; i++)
		for (j = 0; j <length - 1; j++)
		{
			if (a[i][j] == 1)
			{
				flag = 1;
				for (m = j - i; m <= j + 1 + i; m++)
					cout << str[m];
			}
			if (flag == 1)
			{
				cout << endl;
				flag = 0;
			}
		}
	return 0;
}


int main()
{
	char a[500];
	int i, j, k, l, flag;
	gets(a);
	l = strlen(a);
	for (i = 1; i < l; i++)
		for (j = 0; j < l - i; j++)
		{
		   flag = 1;
		   for (k = j; k <= j + i; k++)
		       if (a[k] != a[2*j + i - k])
				   flag = 0;
		   if (flag)
		   {
			   for (k = j; k <= j + i; k++)
				  cout << a[k];
			   cout << endl;
		   }
		}
	return 0;
}


int main()
{
 	char str[510];
 	int len = 0, x, y;

 	cin >> str;
 	len = strlen(str);
 	for ( int i = 1; i < len; i++ )
 	{
  	    for ( int j = 0; j < len - i; j++ )
  	    {
  		 	for ( x = j, y = j + i; x < y; x++, y-- )
  		 	{
	  	  	 	if ( str[x] != str[y] )
	  	  	 	   break;
			}

			if ( x >= y )
   			{
  	   		    for ( int m = j; m <= j + i; m++ )
  	   		    	cout << str[m];
  	   		    cout << endl;
		 	}
  		}
  	}
  	return 0;
}


int plalindrome(char *p){//?????????
	int n,i;
	for(n=0;*(p+n)!=0;n++);
	for(i=0;i<n/2;i++)
		if(*(p+i)!=*(p+n-1-i))break;
	if(i<n/2)return 0;//??0????
	return 1;//??1???
}
int main(){
	int i,j,k,n;
	char string[501],substring[501];
	cin.getline(string,501);
	for(n=0;string[n]!=0;n++);
	for(i=2;i<=n;i++)//???????????  i??????
		for(j=0;j<=n-i;j++){//j????????
			for(k=0;k<i;k++)substring[k]=string[j+k];
			substring[k]=0;
			if(plalindrome(substring))cout<<substring<<endl;
		}
	return 0;
}


void f(int n,char s[],int len);

int main()
{
	char s[520];
	cin.getline(s,518);
	int i,len;
	len=strlen(s);
	for (i=2;i<=len;i++)
	{
		f(i,s,len);
	}
	return 0;
}

void f(int n,char s[],int len)
{
	int j,p,k;
	for (j=0;j<=len-n;j++)
	{
	 for (p=j;p<=j+n-1;p++)
	 {
		 if (s[p]!=s[2*j+n-1-p])
			 break;
	 }
	 if (p==j+n)
	 {
		 for (k=j;k<=j+n-1;k++)
		 {
			 cout<<s[k];
		 }
		 cout<<endl;
	 }
	}
}


/*
 * file    homework 9_5
 * author  ??
 * date    2010-11-24
 * description
           ???????????????????
*/

int main()
{
	char str[501];
	int i, j, k, len;
	cin >> str;
	len = strlen(str);
	for (i = 2; i <= len; i ++)
		for (j = 0; j <= len - i; j ++)
		{
			for (k = 0; k <= (i - 1) / 2; k ++)
				if (str[j + k] != str[j + i - 1 - k])
					break;
			if (k > (i - 1) / 2)
			{
				for (k = 0; k < i; k ++)
					cout << str[j + k];
				cout << endl;
			}
		}

	return 0;
}


char a[310];
void hui(int i,int l){
	int j;
	for(j=0;j<l;j++){
		if(a[i+j]!=a[l+i-1-j])
		return ;
	}
	for(j=0;j<l;j++)
		cout<<a[i+j];
	cout<<endl;
	return;
}
int main()
{
	int n,x,k;
	cin>>a;
	n=strlen(a);
	for(x=2;x<n;x++)
	{
		for(k=0;k<n;k++){
		hui(k,x);
		}
	}
		return 0;
}


void find(char sen[],char t[],int j,int i);
void trans(char t[],char tt[]);
int main()
{
   char sen[501],t[500],tt[500];
   int i=2,j,len,p,s,len1;
   cin>>sen;
   len=strlen(sen);

   while(i<=len)//i??????,j??????
   {
	   j=0;
	   while(j<=len-i)
	   {
		   p=1;
	      find(sen,t,j,i);

		  trans(t,tt);

		  for(s=1;s<=i;s++)
		  {
		     if(t[s]!=tt[s])
			 {
				 p=0;break;
			 }
		  }

		  if(p==1)
		  {

			  for(s=1;s<=i;s++)
			  {
				  if(s!=i)
				  {
					  cout<<t[s];
				  }
				  else
				  {
					  cout<<t[s]<<endl;
				  }
			  }
		  }

	    j++;
	   }

	   i++;

   }
   return 0;

}
void find(char sen[],char t[],int j,int i)//??????
{
   int k,n;
   for(k=j,n=1;k<=j+i-1;k++,n++)
   {
	   t[n]=sen[k];
   }
   t[n]='\0';
}
void trans(char t[],char tt[])//??????????????
{
     int k,n,len;
	 len=strlen(t);
	 for(k=1,n=len-1;k<=len-1;k++,n--)
	 {
         tt[n]=t[k];
	 }
	 tt[len]='\0';
}


int main()
{
  char str1[500];
  int i,j,n,x=0,t;
  gets(str1);
  for (n=2;n<=strlen(str1);n++)
   {
     for (i=0;i<strlen(str1);i++)
      {
       if((i+n)>strlen(str1)) break;
       for (j=i;j<=i+n-1;j++)
         {
           if(str1[j]==str1[i+i+n-1-j]) x=x+1;
          }
       if(x==n)
         {
          for(t=i;t<i+n;t++) printf("%c",str1[t]);
          printf("\n");
          }
       x=0;
       }
     }

  return 0;
}


int main()
{
       char s[500];
	   int length,l,i,j,p,k;
	   cin>>s;
	   length=strlen(s);
	   for(l=2;l<=length;l++)
          for(i=0;i<length-l+1;i++)
		  {
			int flag=0;
			for(j=i,p=1;j<l/2+i;j++)
			{
                 if(s[j]!=s[j+l-p])
				{
					flag=1;
					break;
				}
				else
					p+=2;
			}
			if(flag==0)
			{
				for(k=i;k<i+l;k++)
					cout<<s[k];
				cout<<endl;
			}
		  }
		  return 0;
}


int main(){
	char a[501];
    cin.getline(a,501);
    int i,j;
    int k;
    int p;
    int s;
    int count=0;
    int len;
    len=strlen(a);
    for(i=0;i<len-1;i++){
    	if(a[i]==a[i+1]){cout<<a[i]<<a[i+1]<<endl;}
    }
    for(i=3;i<=len;i++)
    	for(j=0;j<len;j++){
    		if(i%2==1){
    			k=(int)i/2;
    			if(j-k>=0&&j+k<len){
    				for(s=1;s<=k;s++){
    					if(a[j-s]==a[j+s])count++;
    					else break;
    				}
    				if(count==k){
    					for(p=j-k;p<j+k;p++)
    						cout<<a[p];
    					cout<<a[j+k]<<endl;
    				}count=0;
    			}
    		}
    		else if(i%2==0){
    			k=(int)i/2-1;
    			if(j-k>=0&&j+k+1<len){
    				if(a[j]==a[j+1]){
    					for(s=1;s<=k;s++){
    						if(a[j-s]==a[j+1+s])count++;
    						else break;
    					}
    					if(count==k){
    						for(p=j-k;p<j+k+1;p++)
    							cout<<a[p];
    						cout<<a[j+k+1]<<endl;
    					}
    				}count=0;
    			}
    		}
    	}
    return 0;
}


int main()
{
	char str[500];
	int j,p=2,len,flag,m;
	gets(str);
	len=strlen(str);
	for(m=0;m<len;m++)
	{
		for(j=0;(j<len-m)&&(j>=0);j++)
		{
			flag=1;
			if(str[j]==str[j+m+1])
			{
				if(j+1==j+m+1)
					printf("%c%c\n",str[j],str[j+1]);
				else
				{
					for(p=1;p<=m/2;p++)
					{
						if(str[j+p]==str[j+m+1-p])
							flag*=1;
						else
							flag*=0;
					}
					if(flag==1)
					{
						for(p=j;p<=j+m+1;p++)
							printf("%c",str[p]);
						printf("\n");
					}
				}
			}
		}
	}
	return 0;
}


int main()
{char str[550];
 cin.getline(str,501);
 int length=strlen(str);
 for(int i=2;i<=length;i++)
  for(int j=0;j<=length-i;j++)
   {int flag=1;
    for(int k=0;flag&&k<i/2;k++)
      if(str[j+k]!=str[j+i-1-k])
         flag=0;
    if(flag)
     {for(int k=0;k<i;k++)
        cout<<str[j+k];
      cout<<endl;
     }
   }
 return 0;
}


void main()
{
	char s[501];
	int i,j,k,x;
	int count=0;
	int flag=0;
	gets(s);
	for (i=2;i<=strlen(s);i++)
	{
		for(j=0;(j+i)<=strlen(s);j++)
		{
			count=0;flag=0;
			for(k=0;k<(i/2);k++)
			{
				if (s[j+k]==s[j+i-k-1]) count++;

			}
			if(count==i/2)
			{
				for(k=0;k<i;k++)
				printf("%c",s[j+k]);
				printf("\n");
			}
		}
	}
}


char substr(char s[], int start, int end)
{
while ((end>start)&&(s[start]==s[end]))
{ start++; end--;}
if(end>start)
return 0;
else return 1;
}

osubstr(char s[], int start, int end)
{
while(start<=end) putchar(s[start++]);
putchar('\n');
}
main ()
{
char s[500];
int m,n,len,width;
gets(s);
len=strlen(s);
for(width=1; width<len; ++width)
for(m=0; m<=len-width;++m)
if(substr(s, m, m+width))
osubstr(s, m, m+width);
}


int main()
{
 char *p;
 p=(char *)malloc(sizeof(char)*500);
 gets(p);
 int i,j,k,flag;
 for(j=1;j<strlen(p);j++)
  for(i=0;i<strlen(p)-1;i++)
  {flag=1;
   if(i+j<=strlen(p)){
   for(k=0;k<j/2+1;k++)
   if(*(p+i+k)!=*(p+i+j-k))
   {flag=0;break;}
   if(flag)
   {for(k=i;k<=i+j;k++)
    printf("%c",*(p+k));
    printf("\n");} }
  }
}


int main()
{
	int k = 2, i = 0, j = 0;
	char str[500];
	cin >> str;
	int len = strlen(str);
	int p = 0;
	for (k = 2; k <= len; k++)
		for (i = 0; i <= len - k; i++)
		{
			p = 0;
			for (j = i; j < i + k / 2; j++)
			{
				if (str[j] != str[2 * i + k - 1 - j])
					break;
				else
					p++;
				if (p == k / 2)
				{
					for (int t = i; t <= i + k - 1; t++)
						cout << str[t];
					cout << endl;
				}
			}
		}

			return 0;
}


/*
 * 0.cpp
 *
 *  Created on: 2011-12-30
 *      Author: Alfalfa
 */
int main() {
	char string[500];
	cin>>string;
	int len=strlen(string);
	int i,j,k=1;
	while(k<len){
		for(i=0,j=k; j<len; i++,j++){
			int begin=i,end=j;
			while(begin<end){
				if(string[begin]!=string[end]) break;
				else{
					begin++;
					end--;
				}
			}
			if(begin>=end){
				int print=i;
				for(print; print<=j; print++)
					cout<<string[print];
				cout<<endl;
			}
		}
		k++;
	}
}


int main()
{
	char s[500];
	int len,len0,m,n,i,j,f=0;
	gets(s);
	len0=strlen(s);
	for(len=2;len<=len0;len++){
		for(i=0;i<len0-len+1;i++){
			j=i+len-1;m=i;n=j;
			while(s[m]==s[n] && m<=i+len/2-1){
				m++;n--;}
			if(m==i+len/2){
				for(m=i;m<=j;m++)
					printf("%c",s[m]);
				printf("\n");
			}
		}
	}
	return 0;
}


void f(char *p1,char *p2)
{
     char *p=p1,*q=p2;
     for(;p1<p2;p1++,p2--)
     if(*p1!=*p2) break;
     if(p1>=p2) {for(;p<=q;p++) printf("%c",*p);printf("\n");}
}
int main(int argc, char *argv[])
{
  char a[500];
  int i,j;
  char *p,*q;
  scanf("%s",a);
  for(i=1;i<=strlen(a)-1;i++)
  for(j=0;j<strlen(a)-i;j++)
  {p=a+j;q=a+i+j;f(p,q);}
  return 0;
}


char a[1000];
void judge(int left,int right)
{
	for (int i=left;i<=right;i++)
	{
		if (a[i]!=a[right+left-i])
			return ;
	}
	for (int i=left;i<=right;i++)
	{
		cout<<a[i];
	}
	cout<<endl;
	return;
}

int main()
{
	cin.getline(a,1000);
	int len=strlen(a);
	for (int j=1;j<=len-1;j++)
	{
		for (int i=0;i<len-1;i++)
		{

				if (i+j<=len-1)
				{judge(i,i+j);
				}
		}
	}
return 0;}


/*
 * homework3.cpp
 *
 *  Created on: 2012-12-4
 *      Author: Lixurong
 */

int main()
{
	char a[1002];
	cin >> a;
	for( int i=2; i<=strlen(a); i++ )
	{
		for( int j=0; j<=strlen(a)-i; j++ )
		{
			int p=0;
			for( int x=0; x<i; x++ )
			{
				if(a[j+x]!=a[j+i-x-1])
				{
					p=1;
					break;
				}
			}
			if(p==0)
			{
				for( int x=j; x<j+i; x++ )
				{
					cout << a[x];
				}
				cout << endl;
			}
		}
	}
}


char substr(char s[],int start,int end)
{
	while((end>start) && (s[start]==s[end]))
	{
		start++;
		end--;
	}
	if(end>start)
		return 0;
	else
		return 1;
}
osubstr(char s[],int start,int end)
{
	while(start<=end)
	{
		putchar(s[start++]);
	}
	putchar('\n');
}
int main()
{
	char s[500];
	int m,len,width;
	gets(s);
	len=strlen(s);
	for(width=1;width<len;++width)
	{
		for(m=0;m<=len-width;++m)
		{
			if(substr(s,m,m+width))
				osubstr(s,m,m+width);
		}
	}

}


int main()
{
	char a[500];
	int len, i, j, k;
	cin >> a;
	len = strlen(a);
	for (i = 2; i <= len; i++)
		for (j = 0; j <= len - i; j++)
		{
			for (k = 0; k < i / 2; k++)
			{
				if (a[j + k] != a[j + i - 1 - k])
				{
					k = -1;break;
				}
			}
			if (k != -1)
			{
				for (k = j; k < j + i; k++)
					cout << a[k];
				cout << endl;
			}

		}
	return 0;
}


int check(char c[])
{
	int len,i;
	char d[1000];
	len=strlen(c);
	for(i=0;i<len;i++)
		*(d+i)=*(c+len-i-1);
	*(d+len)='\0';
	if(strcmp(c,d)==0)
		return 1;
	else
		return 0;
}

int main()
{
	char a[1000];
	char b[1000];
	int i,j,k,len,m;
	scanf("%s",a);
	len=strlen(a);
		for(i=2;i<=len;i++)
		{
			for(j=0;j<=len-i;j++)
			{
				for(m=0;m<i;m++)
					*(b+m)=*(a+j+m);
				b[i]='\0';
				if(check(b))
					printf("%s\n",b);
			}
		}
		return 0;
}


void s(char[], int, int);
int main()
{
	char a[1000];
	cin .getline(a, 1000);
	int len = strlen(a);
	s(a, 1, len);
	return 0;
}
void s (char a[1000], int n, int len)
{
	if (n > len / 2)
		return;
	else
	{
		for (int i = 0; i + 2 * n - 1 < len; i++)
		{
			int flag = 1;
			for (int j = n; j > 0; j--)
			{
				if (a[i + n - j] != a[i + j + n - 1])
				{
					flag = 0;
					break;
				}
			}
			if (flag)
			{
				for (int m = i; m <= i + 2 * n - 1; m++)
					cout << a[m];
				cout << endl;
			}
		}
		s (a, n + 1, len);
	}
}


int main()
{
    int i, j, k;
    char str[500];
    cin.getline(str, 500);
    int len = strlen(str);
    for (j = 2; j <= len; j++)
    {
         for (i = 0; i <= len - j; i++)
         {
              for (k = 0; k < j / 2; k++)
              {
                   if (str[i+k] != str[i+j-k-1])
                   {
                       break;
                   }
              }
              if (k == j / 2)
              {
                  for (int ii = i; ii < i + j; ii++)
                  {
                       cout << str[ii];
                  }
                  cout << endl;
              }
         }
    }
    return 0;
}


int main()
{
   char a[1000];
   cin.getline(a,1000);
   int len=strlen(a);
   int i,j,k,l;
   for(j=2;j<=len;j++)
   {
       for(i=0;i<=len-j;i++)
       {
           int k;
           for(k=i;k<i+j&&a[k]==a[i+j-(k-i)-1];k++);
           if(k==i+j) {for(int t=i;t<i+j;t++) cout<<a[t];
           cout<<endl;
           }
       }
   }
   return 0;
}


//
//  main.cpp
//  ????
//
//  Created by ? ?? on 12-11-12.
//  Copyright (c) 2012? ? ??. All rights reserved.
//

int main()
{
    char a[500];
    cin.getline(a, 500);
    int la, c, d, sum;
    la = strlen(a);
    int i, j, k;
    for (i = 2; i <= la; i = i + 2)
    {
        for (j = 0; j <= la - i; j++)
        {
            d = j;
            c = i + j - 1;
            sum = 0;
            do
            {
                if (a[d] != a[c])
                {
                    sum++;
                }
                d++;
                c--;
            } while (c > d);
            if (sum == 0)
            {
                for (k = j; k <= i + j - 1; k++)
                {
                    cout << a[k];
                }
                cout << endl;
            }
        }
    }

    return 0;
}


main()
{
    char s[LEN];
    scanf("%s",s);
    int slen=strlen(s);
    int i,j,k=LEN;
    for(i=2;i<=slen;i++)
    {
        for(j=0;(j+i)<=slen;j++)
        {
            for(k=j;k<=(j+i-1);k++)
               if(s[k]!=s[2*j+i-1-k]) break;
            if(k==(j+i))
               for(k=j;k<=(j+i-1);k++)
               {
                   printf("%c",s[k]);
                   if(k==(j+i-1)) printf("\n");
               }
            k=LEN;
        }
    }
    getchar();
    getchar();
    getchar();

}


char a[501];
int len;
int lookfor(int k)
{
	char *p=NULL,*q=NULL;
	int i,p1=1,j;
	for(i=0;i<=len-k;i++)
	{
		p=&a[i];p1=1;
		q=&a[i+k-1];
		while(p<q)
		{
			if(*p!=*q)
			{
				p1=0;break;
			}
			p++;q--;
		}
		if(p1==1)
		{
			for(j=0;j<=k-1;j++)
				cout<<a[j+i];
			cout<<endl;
		}
	}
	return 0;
}
int main()
{
	int i;
	cin>>a;
	len=strlen(a);
	for(i=2;i<=len;i++)
	lookfor(i);
	return 0;
}


void f(int j,int i,char c[]);
void g(char c[],int m,int j);
int main()
{
	char c[501];
	int i=0,j,k,m,n,y=0,l;
	c[0]=getchar();
	while(c[i]!='\n')
	{
		i++;
		c[i]=getchar();
	}
	for(j=2;j<i;j++)
	{
		f(j,i,c);
	}

}
void f(int j,int i,char c[])
{
	int m,n;
	for(m=0;m<=i-j;m++)
	{
		g(c,m,j);
	}
}
void g(char c[],int m,int j)
{
	int p,q,i;
	p=m;
	q=m+j-1;
	for(;;p++,q--)
	{
		if(c[p]!=c[q]) break;
		else if((p==q)||(p==q-1))
		{
			for(i=m;i<=m+j-1;i++)
			{
				printf("%c",c[i]);
			}
			printf("\n");
		}
	}
}


int main()
{
	char str[530];
	int i,j, lng, len, h, k;
	cin >> str;
	len = strlen(str);
	for (lng = 2; lng <= len; lng++)
		for(h = 0; h < len; h++)
		{
			i = h;
			j = h + lng - 1;
			while (i < j)
			{
				if(str[i] != str[j])
					break;
				i++;
				j--;
			}
			if(i == j || i > j)
			{
				for (k = 0; k < lng - 1; k++)
					cout << str[h + k];
				cout << str[h + k] << endl;
			}
		}
	return 0;
}


int main()
{
	int i, j, k;
	int nhuiwen, len;
	char str[500];

	cin >> str;
    len = strlen(str);
	for (nhuiwen = 2; nhuiwen <= len; nhuiwen ++)
	{
		char buf1[500] = {'\0'}, buf2[500] = {'\0'};
		for (i = 0; i + nhuiwen - 1 < len; i ++)
		{
			int n = nhuiwen, m = 0;
			for (j = i; j <= i + nhuiwen - 1; j ++)
			{
				buf1[-- n] = str[j];
				buf2[m ++] = str[j];
			}
			//cout << "n = " << n << endl << "m = " << m << endl;
			buf1[nhuiwen] = '\0'; buf2[nhuiwen] = '\0';
			if (strcmp(buf1, buf2) == 0)
			{
				for (k = 0; k < nhuiwen; k ++)
					cout << buf1[k];
				cout << endl;
			}
		}
	}
	return 0;
}


void f(char a[500])
{
	int i,j,k,m,n,flag = 1,c;
	cin >> a;
	int b = strlen(a);
	for (j = 2;j <= b ;j++)
	 for (i = 0;i + j <= b;i++)
		{c = 1;
		for (m = i,n = i + j - 1;m < n;m++,n--)
		{
			if (a[m] != a[n])
			{
				c = 0;
				break;
			}
                  }
		if (c)
		{
			if (flag)
			{
				flag = 0;
				for (k = i;k < i + j;k++)
					cout << a[k];
			}
			else
			{
				cout <<endl;
				for (k = i;k < i + j;k++)
					cout <<  a[k];
			}
		}
		}
}
	int main ()
	{
		char a[500];
		f(a);
		return 0;
	}


int huiwen(char a[],int m,int n)
{
	int i;
	while(m<n)
	{
		if(a[m]!=a[n]) {return 0;break;}
		else {m++;n--;}
	}
	if(m>=n) return 1;
}
void print(char a[],int m,int n)
{
	int i;
	for(i=m;i<=n;i++)
		printf("%c",a[i]);
	printf("\n");
}
int main ()
{
	char a[500];
	int i,j,k,l;
	gets(a);
	l=strlen(a);
	for(i=2;i<=l;i++)
	{
		for(j=0;j<=l-i;j++)
		{
			if(huiwen(a,j,j+i-1)==1)
				print(a,j,j+i-1);
		}
	}
}


char a[501];
int len, i = 0, t = 2, p = 0, j = 0, n = 1;

void back(char m[])
{
	len = strlen(m);
	do
	{
		for (j = 0;j <= len - t;j++)
		{
			for (i = j;i < j + t;i++)
			{
				if (m[i] == m[j+t-n])
				{
					if (i + 1 >= j + t -n)
					{
						for (i = j;i < j + t;i++)
							cout << m[i];
						cout << '\n';
						break;
					}
				}
				else
					break;
				n++;
			}
			n = 1;
		}
		t++;
	}while (t <= len);
}
int main()
{
	cin >> a;
	back(a);
	return 0;
}


int main()
{
	char str[500];
	int a,t;
	int i=0,j=0,k=2,flag=1;
    scanf("%s",str);
	a=strlen(str);
	for(k=2;k<=a;k++)
	{
		for(i=0;i<a;i++)
		{   flag=1;
		    j=i;
			for(j=i;j<=i+k-1;j++)
			{
				if(str[j]!=str[2*i-j+k-1])
					flag=0;

			}
			if(flag==1)
			{ t=i;
			   for(t=i;t<=i+k-1;t++)
			   {	printf("%c",str[t]);
			   }
			   printf("\n");

			}
		}
	}
	return 0;
}


char str[500];

int huiwen( int i , int length )
		{
		    int j, p = i + length -1;
			for (j = i; j <= (2*i + length)/2  ; j++ )
			{
				if (str[j] != str[p])
					return 0;
				    p--;
			}

			return 1;
		}

int main()
	{
		int length, i = 0, j;
		cin >> str;
		for (length = 2; str[length - 1]!='\0';length++)
			for (i = 0;str[i+length-1] != '\0'; i++)
			{
				if (huiwen(i,length))
					for (j = i; j < i+length; j++)
					{
						if( j == i + length -1)
							cout << str[j] << endl;
						else
							cout << str[j];
					}
			}
	return 0;
	}


void ggg( int i,  char b[500])
{
	int len, j, k, flag;
	len = strlen(b);
	for( j = 0;j <= (len - i);j++ )
	{
		for( k = 0;k < i/2;k++ )
		{
			if( b[j + k] == b[j + i - k - 1] )
			{
				flag = 1;
			}
			else
			{
				flag = 0;
				break;
			}
		}
		if( flag == 1 )
		{
			for( k = j;k < j+i; k++ )
			{
				cout << b[k];
			}
			cout << '\n';
		}
	}
}
int main ()
{
	int i, len;
	char a[500];
	cin.getline(a, 500);
	len=strlen(a);
	for( i = 2;i <= len;i = i + 2)
	{
		ggg(i,a);
	}
return 0;
}


/*
 * 12-6huiwen.cpp
 *
 *  Created on: 2011-12-30
 *      Author: Dai Guangda
 */
int main()
{
	char a[501];
	int start,end,zlen,i,j,len;
	cin >>a;
	len = strlen(a);
	for (zlen=2; zlen<=len; zlen++)
	{
		for (start=0; start<=len-zlen; start++)
		{
			end = start+zlen-1;
			i=start; j=end;
			while (a[i]==a[j] && i<j)
			{
				i++;
				j--;
			}
			if (i>=j)
			{
				for(i=start; i<=end; i++)
					cout <<a[i];
				cout <<endl;
			}
		}
	}
	return 0;
}


int main()
{
	char str[501];
	int i,j,k,length,n,s;
	gets(str);
    length=strlen(str);
	for(i=2;i<=length;i++)
		for(j=0;j<length;j++)
		{
			k=0;
	  	    for(n=0;n<i;n++)
			{
				if(str[j+n]==str[j+i-n-1])
			     	k++;
			    if(k==i)
				{	for(s=j;s<=j+n;s++)
						printf("%c",str[s]);
						printf("\n");
				}
			}
		}
	return 0;
}


void sssss(char *);
int main(void)
{
	int d,t,n,i,j,k;
	char s[500],sub[500],rsub[500];
	int plen;
	gets(s);
	d=strlen(s);
	for(plen=2;plen<=d;plen++)
		{
			for(j=0;j<=d-plen;j++)
			{

				strncpy(sub,s+j,plen);
				sub[plen]='\0';
				strcpy(rsub,sub);
				sssss(rsub);
				rsub[plen]='\0';
				if(strcmp(sub,rsub)==0)
					printf("%s\n",sub);
			}

		}

return 0;}
void sssss(char *s)
{
	int d,i;
	char tmp;
	d=strlen(s);
	for(i=0;i<(d+1)/2;i++)
	{
		tmp=s[i];
		s[i]=s[d-1-i];
		s[d-1-i]=tmp;
	}
}


//???????
//??? 1200017623
//???????

int main(){
	int judge(char*,int);
	char str[500],temp[500] = {'\0'},*p;
	int len,num;
	cin>>str;
	len = strlen(str);
	for(num = 2;num <= len;num++){
		for(p = str;p < str + len +1 - num;p++){
			strncpy(temp,p,num);
			if(judge(temp,num))cout<<temp<<endl;
		}
	}
	return 0;
}

int judge(char *ch,int n){       //???????
	char *p,*q;
	for(p = ch,q = ch + n - 1;p <= q;p++,q--){
		if(*p != *q)return 0;
	}return 1;
}


int main()
{
	char a[501]; int  i,j,k,t,m,n;
	cin>>a;
	t=strlen(a);
	for (k=1;k<=t-1;k++)
	{
		for (i=0;i<t-1;i++)
			if (i+k<t&&a[i]==a[i+k])
			{
				for (m=i,n=i+k;m<n;m++,n--)
					if (a[m]!=a[n]) break;
				if (m>=n)
				{for (j=i;j<=i+k;j++)
					cout<<a[j];
				cout<<endl;
				}
			}
	}
	return 0;
}


int main()
{
	char str[501];
	cin>>str;
	for(int i=2;i<=strlen(str);i++)
	{
		if(i%2==0)
		{
		   for(int j=0;j<=strlen(str)-i;j++)
		   {
			   int k,l=1;
			   for(k=j;k<j+i/2;k++)
			   {
				   if(str[k]==str[i+j-l])
				   {
					   l++;
					   continue;
				   }
				   else
					   break;
			   }
			   if(k>=j+i/2)
			   {
				   for(int m=j;m<j+i;m++)
					   cout<<str[m];
			   cout<<endl;
			   }
		   }
		}

		if(i%2==1)
		{
		   for(int j=0;j<=strlen(str)-i;j++)
		   {
			   int k,l=1;
			   for(k=j;k<j+i/2;k++)
			   {
				   if(str[k]==str[i+j-l])
				   {
					   l++;
					   continue;
				   }
				   else
					   break;
			   }
			   if(k>=j+i/2)
			   {
				   for(int m=j;m<j+i;m++)
					   cout<<str[m];
			   cout<<endl;
			   }
		   }

		}
	}
	return 0;
}


main()
{  char s[1000];
   int m,i,j,k,len,x,y,n,h;
   gets(s);
   len=strlen(s);
   for(n=2;n<=len;n++)
  {
   for(i=0;i<=len-n;i++)

   for(k=i,j=i+n-1;s[k]==s[j];k++,j--)
   if(k>=j)
  {
   for(h=i;h<i+n;h++)
   printf("%c",s[h]);
   printf("\n");break;}

}

}


int main()
{
	static char str[501];
	int len,i,j,p,l;
	gets(str);
	for(len=0;str[len]!='\0';len++);
	for(l=2;l<=len;l++)
	{
		for(i=0;i<=len-l;i++)
		{
			for(j=0;j<l/2;j++)
			{
				if(str[i+j]!=str[i+l-1-j])
				{
					goto here;
				}
			}
				for(p=i;p<i+l;p++)
					printf("%c",str[p]);
				printf("\n");
				here: continue;
		}
	}

	return 0;
}


char a[max];
char b[251],c[251];
void panduan(int i)
{
	int k, l;
	if (2 * i > strlen(a))return;
	for (int j = 0; 2 * i + j <= strlen(a); j++)
	{
		for ( k = 0; k < i; k++)b[k] = a[j + k];
		b[k] = '\0';
		for (l = 0; l < i; l++)c[l] = a[j + i * 2 - 1 - l];
		c[l] = '\0';
		if (strcmp(b, c) == 0){
			cout << b;
			for (int x = strlen(c) - 1; x >= 0; x--)cout << c[x];
			cout << endl;
		}

	}
	panduan(i + 1);
}
int main()
{
	cin >> a;
	panduan(1);

}


void main()
{
	void huiwen(char c[1000],int);
	int i,n;
	char c[1000];
	gets(c);
	for (i=2;i<=strlen(c);i++)
		huiwen(c,i);

}

void huiwen(char c[1000],int i)
{
	int j,l,flag=0,m;
	char *p=c;
	for(j=0;j<=strlen(c)-i;j++)
	{	for(l=0;l<=i/2;l++)
		{
			if(*(p+j+l)!=*(p+j+i-l-1))
			{flag=1;break;}
		}
			if(flag==0)
			{
				for(m=0;m<i;m++)
					printf("%c",*(p+j+m));
				printf("\n");
			}
		flag=0;
	}
}


int main()
{
    int i,j,k,sign,l;
	char s[550];

	gets(s);
	l=strlen(s);
	for(i=2;i<=l;i++)
	{
	    for(j=0;j<l;j++)
		{
			sign=0;
		    for(k=j;k<j+i;k++)
			{
			    if(s[k]==s[j+i-1-k+j])
					sign++;
			}
			if(sign==i)
			{
				for(k=j;k<j+i;k++)
					printf("%c",s[k]);
				printf("\n");
			}
		}
	}
	return 0;
}


/*
 * fuxi001_huiwen_zichuan.cpp
 * name:????
 *  Created on: 2011-12-21
 *      Author: zhujile
 */
void check(char *p,char *q)
{
	int flag=1;                   //??
	char *st=p,*en=q;
	for (;st<en;st++,en--)        //??????
	{
		if (*st==*en) continue;
		else {flag=0;break;}      //???????
	}
	if (flag==1)                  //?????????
	{
		while(p<=q)               //??
		{
			cout<<*p;
			p++;
		}
		cout<<endl;
	}
}
int main(){
	char a[501];
	cin.getline(a,501);            //??
	char *p,*q;
	int length,k;
	length=strlen(a);              //????
	for (k=1;k<length;k++)         //??????
	{
		p=a;
		q=a+k;
		for (;q<a+length;p++,q++)
		{
			if (*p==*q)            //???????
				check(p,q);        //??
		}
	}
	return 0;
}


char * my_strrev(char *str);
int main()
{
	int t,i;
	char str[1000];
	gets(str);t=2;
	char subStr[101], revSubStr[101];
	while(t<=strlen(str))
	{
		for(i=0;i<=strlen(str)-t;i++)
		{
			strncpy(subStr,str+i,t);
			strncpy(revSubStr,str+i,t);
			subStr[t] = revSubStr[t] = '\0';
			my_strrev(revSubStr);
			if(strcmp(subStr,revSubStr)==0)
			{
				cout<<subStr<<endl;
			}
		}
		t++;
	}

	return 0;
}
char * my_strrev(char *str)

{

   char *right = str;

   char *left = str;

   char ch;

   while (*right)   right++;

   right--;

   while (left < right)

   {

       ch = *left;

        *left++ = *right;

        *right-- = ch;

   }

   return(str);

}


main()
{
  int i,j,k,n,bools;
  char s[500];
  gets(s);
  n=strlen(s);
  for(k=2;k<=n;k++)
    for(i=0;i<=n-k;i++)
     { bools=1;
       for(j=i;j<i+k/2;j++)
         if(s[j]!=s[2*i+k-j-1])
          {bools=0;break;}
       if(bools==1)
         { for(j=i;j<=i+k-1;j++)
            printf("%c",s[j]);
           printf("\n");
         }
     }
  return 0;
}


int main()
{
	char s[500], s2[500], temp1[500], temp2[500];
	int len, n, i, j, k;
	scanf("%s", s);
    len = strlen(s);
	for (i=0;i<len;i++) s2[i] = s[len - i - 1];
	s2[len]=0;
	for (i=2;i<=len;i++)
		for (k=0;k<=len-i;k++)
		{
			for (j=0;j<i;j++) temp1[j] = s[j+k];
			temp1[i] = 0;
			for (j=0;j<i;j++) temp2[j] = s2[len-k-i+j];
			temp2[i] = 0;
			if (strcmp(temp1, temp2)==0) printf("%s\n", temp1);
		}
	return 0;
}


void f(int x,char str[501]);
   int main()
  {
      int le,x=2;
       char str[501];
        cin>>str;
      for(x=2;x<=le;x++)
        f(x,str);
        return 0;
   }

void f(int x,char str[501])
{
	int i,le,j,flag=1,p;
	   le=strlen(str);
	   for(i=0;i<=le-x;i++)
	  {
		   if(x%2==0)
		   {
			   for(j=i;j<=i+x/2-1;j++)
				if(str[j]!=str[i+i+x-1-j])
					flag=0;
		         if(flag==1)
			     {
			        for(p=i;p<=i+x-1;p++)
			        cout<<str[p];
			        cout<<endl;
			      }
		         flag=1;
		    }
	           if(x%2==1)
	           {
		          for(j=i;j<=i+(x-1)/2-1;j++)
			          if(str[j]!=str[i+i+x-1-j])
				           flag=0;
		              if(flag==1)
		               {
			                 for(p=i;p<=i+x-1;p++)
				             cout<<str[p];
			                 cout<<endl;
		                }
		                flag=1;
	           }
	}
}


void huiwen(char string[500],int full,int length)
{
	int x,y,u,i;
	for(x=0;x<=full-length+1;x++)
    {
         i=1;
		for(y=x;y<=x+length-1;y++)
		{
			if(string[y]==string[2*x+length-1-y])
				i=i*1;
			else
				i=i*0;
		}
		if(i==1)
		{
			for(u=x;u<=x+length-1;u++)
				printf("%c",string[u]);
			printf("\n");
		}
	}
}

int main()
{
	char str[500];
	gets(str);
	int w;
	w=strlen(str);
	int v;
	for(v=2;v<=w;)
	{
	  huiwen(str,w,v);
	  v=v+2;
	}
	return 0;
}


int main()
{
	char str[505];
	cin >> str;
	int len=strlen(str);
	int l,s;
	for(l=2;l<=len;l++)
	{
		for(s=0;s<=len-l;s++)
		{
			int flag=1;
			for(int p=s,q=s+l-1;p<q;p++,q--)
			{
				if(str[p]!=str[q])
				{
					flag=0;
					break;
				}
			}
			if(flag)
			{
				for(int k=s;k<=s+l-1;k++)
					cout<<str[k];
					cout<<endl;
			}
		}
	}
	return 0;
}


void main()
{
	char str[MAX],sub1[MAX],sub2[MAX];
	int	len,i,j,k,l;//i length of substring, j head of substring

	gets(str);
	len=strlen(str);

	for(i=2;i<=len;i++){
		for(j=0;j<=len-i;j++){
			for(k=j,l=0;k<=i+j-1;k++,l++){
				sub1[l]=str[k];
				sub2[l]=str[i+2*j-1-k];
			}
			sub1[i]='\0';
			sub2[i]='\0';
			if(strcmp(sub1,sub2)==0)
				printf("%s\n",sub1);
		}
	}
}


int judge(char a[],int i,int k)
{
   int j=i+k;
    while(a[i]==a[j]&&i<=strlen(a)&&j>=0)
    {
        i++;j--;

    }
    if(i>=j)
        return 1;
    else return 0;
}

int main()
{
    char a[510];
    memset(a,0,sizeof(char)*510);
    gets(a);
                                        /*if(judge(a))
                                        printf("YES");
                                        else printf("NO");*/
    int i,j,k;
    for(k=1;k<strlen(a);k++)
    {
        for(i=0;i+k<strlen(a);i++)
        {

                if(judge(a,i,k))
                {
                    for(j=i;j<=i+k;j++)
                        printf("%c",a[j]);
                    putchar('\n');
                }

        }

    }

    return 0;
}


int main ()
{
	char ch[500];												//??????
	cin >> ch;
	int len = 0;												//?????????
	len = strlen(ch);
	for ( int templen = 2; templen <= len; templen ++ )			//??????
		for ( int i = 0; i <= len - templen; i ++ )				//?????????????
			for ( int j = i; j < i + templen; j ++ )			//????????????????
			{
				if ( ch[j] != ch[templen+i-1-(j-i)] ) break;
				if ( j == i + templen - 1 )
				{
					for ( int k = i; k < i + templen; k ++ )
						cout << ch[k];
					cout << endl;
				}
			}
	return 0;
}


int main()
{
	int i,j,k,l;
	char a[501];
	gets(a);
	for(j=2;j<strlen(a);j=j+2)
	{
		for(i=0;i<strlen(a);i++)
		{
			int d=0;
			for(k=j/2;k>=0;k--)
			{
				if(a[i+k]==a[i+j-k-1])
				{
					continue;
				}
				else
				{
					d=1;
					break;
				}
			}
			if(d==0)
			{
				for(l=i;l<i+j;l++)
				{
					printf("%c",a[l]);
				}
				putchar('\n');
			}
		}
	}
	return 0;
}


void check_palin(char str[], int begin, int end)
{
	int i, palin = 1;
	for (i = begin; i <= end; i ++)
		if (str[i] != str[begin + end - i]) palin = 0;

	if (palin)
	{
		for (i = begin; i <= end; i ++)
			cout << str[i];
		cout << endl;
	}
}

int main()
{
	char str[500 + 10];
	int i, j, k;
	cin.getline(str, 501);
	for (j = 2; j <= strlen(str); j ++)
		for (i = 0; i < strlen(str); i ++)
			check_palin(str, i , i + j - 1);
	return 0;
}


int main()
{
    char str[510];
    int m,s,i,j,k;
    gets(str);
    for(j=1;j<strlen(str)-1;j++)
      {
        for(i=0;i<strlen(str);i++)
        {
          m=j+1;
          for(s=i;s<=m/2-1+i;s++)
            if(str[s]!=str[m-s-1+i+i])break;
          if(s==m/2+i)
            {for(s=i;s<=i+j;s++)printf("%c",str[s]);printf("\n");}
        }
      }
    return 0;
}


int main()
{   int check(char str[]);
    char string[1000];
    gets(string);
    int n,i;
    n=strlen(string);
    int j;
    int k,m;
    int w=0;
    int r;
    char str2[1000];
    for(j=2;j<n;j++)
    {
                 for(m=0;m<=n-j;m++)
                 {
                                 for(k=m;k<m+j;k++)
                                 {
                                                 str2[w]=string[k];
                                                 w++;
                                                 str2[w]='\0';
                                                 if(k==n)
                                                 break;
                                 }
                                 r=check(str2);
                                 if(r==1)
                                 {
                                 printf("%s\n", str2);
                                 }
                                 w=0;
                 }
    }
    return 0;
}

          int check(char str[])
    {
        int n;
        char str1[1000];
        strcpy(str1,str);
        n=strlen(str);
        int i;
        char c;
        for(i=0;i<=(n-1)/2;i++)
        {
               c=str[i];
               str[i]=str[n-1-i];
               str[n-1-i]=c;
        }
        if(strcmp(str,str1)==0)
        return 1;
        else
        return 0;
        }


int main()
{
	char s[500];
	gets(s);
	int len;
	len=strlen(s);
	int n, i, j;
	int judge;
	for(n=2;n<=len;n++)
	{
		for(j=0;j<len-n+1;j++)
		{
			judge=1;
			for(i=0;i<n;i++)
			{
				if(n+j-i-1>=len) break;
				else
				{
					if(s[i+j]!=s[n-1-i+j]) judge=0;
				}
			}
			if(judge==1)
			{
				for(i=0;i<n;i++)
				{
					printf("%c", s[i+j]);
				}
				printf("\n");
			}
		}
	}
	return 0;
}


int hui(char s[501]){
	int i;
	for(i=0;i<strlen(s);i++){
		if(s[i]!=s[strlen(s)-1-i]){
			return 0;
			break;
		}
	}
	if(i>=strlen(s)) return 1;
}
int main()
{
	int i,j,len;
	char s[501],temp[501];
	cin.getline(s,501);
	for(len=2;len<=strlen(s);len++){
		for(i=0;i+len-1<strlen(s);i++){
			for(j=0;j<len;j++){
				temp[j]=s[i+j];
				temp[len]='\0';
			}
			if(hui(temp)==1)
				cout<<temp<<endl;
		}
	}
	return 0;
}


int main()
{
	char str[500];
	char part[500];
	int k=0;
	scanf("%s",str);
	int length=strlen(str);
	for(int i=2;i<=length;i++)
	{
		for(int m=0;m<length-i+1;m++)
		{
			for(int j=0;j<i;j++)
				part[j]=str[j+m];
			part[i]='\0';
			for(k=0;k<i/2;k++)
				if(part[k]!=part[i-k-1])
					break;
			if(k==i/2)
				printf("%s\n",part);
		}
	}
	return 0;
}


int main()
{
    char s[505];
    int i, j, l;
    cin >> s;
    l = strlen(s);
    for (i = 2; i <= l; i++)
        for (j = 0; j <= l - i; j++)
        {
            int t = i / 2;
            int k;
            for (k = 0; k < t; k++)
            {
                if (s[j + k] != s[j + i - k - 1]) break;
            }
            if (k >= t)
            {
                for (int m = j; m < j + i; m++)
                {
                    cout << s[m];
                }
                cout << endl;
            }
        }

    return 0;
}


void shuchu(char b[], int m)
{
 int i, j, k, l, flag;
 for (j = 2; j <= m; j++)
 {
  for (i = 1; i <= m - 1; i++)
  {
   flag = 1;
   for (k = 0; k < j; k++)
   {
    if (b[i + k] != b[i + j - k - 1])
     flag = 0;
   }
   if (flag)
   {
    for (l = 0; l<j; l++)
    {
     if(l == j-1)
      cout << b[i + l]<<endl;
     else
      cout << b[i + l];
    }
   }
  }
 }
}

int main()
{
 int m;
 char a[501];
 for (m = 1; m > 0; m++)
 {
  if (a[m-1]== '\n')
   break;
  a[m] = cin.get();
 }
 shuchu(a, m);
 return 0;
}


struct hw{
	int s;
	int l;
}queue[N];
int main()
{
  int len,q=0,i,j;
  char str[N];
  gets(str);
  len=strlen(str);
  for(i=0;i<len-1;i++)
  {
   if(str[i]==str[i+1])
    {
	 queue[q].s=i;
	 queue[q++].l=2;
    }
  }
  for(i=0;i<q;i++)
  {
  	for(j=0;j<queue[i].l;j++)
  	printf("%c",str[queue[i].s+j]);
  	printf("\n");
  	if(str[queue[i].s-1]==str[queue[i].s+queue[i].l])
  	{
	  queue[q].s=queue[i].s-1;
	  queue[q++].l=queue[i].l+2;
    }
  }
}


int main()
{
	char ch[500];
	gets(ch);
	int i,len,j,k;
	len=strlen(ch);
	for(i=2;i<=len-1;i++){
			int n;
			n=(i-2)/2;
		for(j=0;j<=len-i;j++){
			int h=0;
			int m=0;
			for(k=j;k<=j+n;k++){
				if(ch[k]==ch[j+i-1+m]){
					h++;
					m--;
				}else{
					break;
				}
				if(h==(i/2)){
					int l;
					for(l=j;l<=j+i-1;l++){
						printf("%c",ch[l]);
					}
					printf("\n");
				}
			}
		}
	}
	return 0;
}


int f(char word[500],int len)
{
	int i;
	for(i=0;i<=len/2;i++)
	{
		if(word[i]!=word[len-1-i])
		{
			return 0;
		}
	}
	return 1;
}
int main()
{
	char str[500],word[1000][500];
	int i,j,len[1000],lenth,m,log;
	gets(str);
	log=0;
	lenth=strlen(str);
	for(i=2;i<=lenth;i++)
	{
		for(j=0;j<=lenth-i;j++)
		{
			for(m=0;m<i;m++)
			{
				word[log][m]=str[m+j];
				word[log][m+1]='\0';
			}
			log++;
			len[log-1]=strlen(word[log-1]);
		}
	}
	for(i=0;i<log;i++)
	{
		if(f(word[i],len[i]))
			printf("%s\n",word[i]);
	}
	return 0;
}


/**
* @file 1000012800_1.cpp
* @author ??
* @date 2010-11-24
* @description
* ??????:??
*/

int main()
{
	char a[501];
	cin >> a;
	int len = strlen(a);
	for (int i = 2; i <= len; i ++)
		for(int j = 0; j + i - 1 < len; j ++)
		{
			int flag = 1;
			int m = j + i - 1;
			for (int k = 0; j + k <= m - k; k ++)
			{
				if (a[j + k] != a[m - k])
				{
					flag = 0;
					break;
				}
			}
			if (flag)
			{
				for (int n = 0; n < i; n ++)
					cout << a[j + n];
				cout << endl;
			}
		}
		return 0;
}


int main()
{
	char str[500] , parlindrome[500] ;
	int len ;
	cin >> str ;
	len = strlen(str) ;
	for (int i = 2 ; i <= len ; i++)
	{
		for (int j = 0 ; j <= len - i ; j++)
		{
			int k ;
			for (k = 0 ; k < i ; k++)
			{
				if (str[j+k] == str[j+i-1-k])
				{
					parlindrome[k] = str[j+k] ;
				}
				else
					break ;
			}
			parlindrome[k] = '\0' ;
			if (k == i)
				cout << parlindrome << endl ;
		}
	}
	return 0 ;
}


int main()
{
	char s[501];
	int i,j,k,p,len;
	scanf("%s",s);
	len=strlen(s);
	for(k=2;k<len;k++)
	for(i=0;i<=len-k;i++)
	{
		for(j=i;j<i+k/2;j++)
		if(s[j]!=s[2*i+k-1-j])break;
		if(j==i+k/2)
		{
			for(p=i;p<i+k;p++)
			printf("%c",s[p]);
			printf("\n");
		}
	}
	return 0;
}


void huiwen(char str[500])
{
	int i, j, k, t, x, len, count;
	len = strlen(str);
	for ( j = 2; j < len + 1; j ++ )                                //j???????????
	{
		for ( i = 0; i <= len - j; i ++ )                           //i?????????
		{
			count = 0;
			for ( k = i, t = i + j - 1; k < t; k ++, t -- )            //k, t???????????????????
			{
				if ( str[k] == str[t] )
					count ++;
			}
			if ( count == j / 2 )
			{
				for ( x = i; x < i + j; x ++ )
					cout << str[x];
				cout << endl;
			}
		}
	}
}

int main ()
{
	char str[500];
	cin >> str;
	huiwen(str);
	return 0;
}


int main()
{
	char a[501];
	char *p,*t,*m;
	cin>>a;
	int la,i,flag=1;
	la=strlen(a);
	for(i=1;i<la;i++)
	{
		for(p=a+i;p<a+la;p++)
		{
			flag=1;
			for(t=p-i,m=p;t<=m;t++,m--)
			{
				if(*t!=*m)
				{
					flag=0;
					break;
				}
			}
			if(flag)
			{
				for(t=p-i;t<=p;t++)
					cout<<*t;
				cout<<endl;
			}
		}
	}
	return 0;
}


int judge(char s[],int start,int wid)
{
	int end=start+wid-1;
	while((s[start]==s[end])&&(start<end))
	{
		start++;
		end--;
	}
	if(start>=end)
		return(1);
	else
		return(0);
}
int main()
{
	char s[600]={'\0'};
	int l,w,i,j,c;
	gets(s);
	l=strlen(s);
	for(w=2;w<=l;w++)
	{
		for(i=0;i<=l-w;i++)
		{
			c=judge(s,i,w);
			if(c==1)
			{
				for(j=i;j<=i+w-1;j++)
					putchar(s[j]);
				printf("\n");
			}
		}
	}
}


int main()
{
    int i,len,j,times,k,flag=1;
    char str[500];
    scanf("%s",str);
    len=strlen(str);
    for(i=2;i<=len;i++)
    {
        times=i/2;
        for(j=0;j<=len-i;j++)
        {
            for(k=j;k<=j+times-1;k++)
            {
                if(str[k]!=str[i+2*j-1-k])
                {flag=0;break;}
            }
            if(flag==1)
                {for(k=j;k<=i+j-1;k++)
                printf("%c",str[k]);
                printf("\n");}
            flag=1;
        }
    }
    return 0;

}


int main()
{
	char str[500];
	int i, j, k, s, length;
	cin.getline(str,500);
	length = strlen(str);
	for (i = 2; i <= length; i++)
	{
		for (j = 0; j <= length - i; j++)
		{
			for (k = j; k < j + i/2; k++)
			{
				if (str[k] != str[2 * j + i - k - 1])
				{
					break;
				}
			}
			if (k == j + i/2)
			{
				for (s = j; s < j + i; s++)
					cout << str[s];
				cout << endl;
			}
		}
	}
	return 0;
}


int main()
{
	int i, j, begin, end, flag, p;
	char a[501];
	cin >> a;
	for (i = 0; a[i] != '\0'; i++)
		p = i;
	p++;
	for (i = 2; i <= p; i++)
	{
		for (j = 0; j <= p - i; j++)
		{
			flag = 1;
			for (begin = j, end = j + i - 1; end > begin; begin++, end--)
				if (a[begin] != a[end])
				{
					flag = 0;
					break;
				}
			if (flag == 1)
			{
				for (begin = j; begin <= j + i - 1; begin++)
					cout << a[begin];
				cout << endl;
			}
		}
	}
	return 0;
}


int main()
{
	char a[500],b[500];
	cin>>a;
	int s=0;
	for (int i=0;i<500;i++)
		if (a[i]=='\0')
			break;
		else
			s++;
	for (int j=2;j<=s;j++)
		for (int i=0;i<s;i++)
		{
			char b[j];
			for (int k=i;k<i+j;k++)
				b[k]=a[2*i+j-1-k];
			for (int m=i;m<i+j;m++)
			{
				if(a[m]!=b[m])
					break;
				if (a[m]==b[m]&&m==i+j-1)
				{for (int p=i;p<i+j;p++)
				cout<<a[p];
				cout<<endl;
				}
			}
		}
		return 0;
}


int main()
{
	char str[600];
	cin>>str;
	int le=strlen(str),p,q;

		for(int k=1;k<=le-1;k++)
			for(int i=0;i<=le-2&&i+k<=le-1;i++)
		{
			int flag=1;

			 for(p=i,q=i+k;p<q;p++,q--)
			   if(str[p]!=str[q])
				{
				 flag=0;
				 break;
				}
			               if(flag==1)
				           {
				            for(int m=i;m<=i+k;m++)
				             cout<<str[m];
			               cout<<endl;
				          }
			  if(flag==0)
				  continue;
		}
	return 0;
}


char a[500];

void checkTheSame(char t[], int n)
{
	int len, i, j, k, p;
	len = strlen(t);
	for (i = 0; i < len - n; i++)
	{
		j = i + n;
		k = i;
		while (j > k)
		{
			if (a[k] != a[j])
				break;
			k++;
			j--;
		}
		if (j <= k)
		{
			for (p = i; p <= i + n; p++)
				cout << t[p];
			cout << endl;
		}
	}
}

int main()
{
	int n = 1, len;
	cin.getline(a, 500);
	len = strlen(a);
	for (n = 1; n < len; n++)
		checkTheSame(a, n);
	return 0;
}


int main()
{
	int ishuiwen(char *p);
	char s[500],sub[500]="0";
	int i,j,l,len;
	gets(s);
	len=strlen(s);
	for(l=2;l<=len;l++){
		for(i=0;i<=len-l;i++){
			for(j=0;j<l;j++){
				sub[j]=s[i+j];
			}
			sub[j]='\0';
			if(ishuiwen(sub))
				printf("%s\n",sub);
		}
	}
	return 0;
}
int ishuiwen(char *p)
{
	int len,i;
	len=strlen(p);
	for(i=0;i<len/2;i++){
		if(*(p+i)!=*(p+len-1-i))
			return 0;
	}
	return 1;
}


/*
 * huiwenzichuan.cpp
 *
 *  Created on: 2011-12-21
 *      Author: Administrator
 */
int main()
{
	char chuan[500];
	cin>>chuan;
	int lenth=strlen(chuan);
	int i,j;
	for(int k=1;k<lenth;k++)
	{
		for(i=0,j=k;j<lenth;i++,j++)
		{
			int begin=i,end=j;
			while(begin<end)
			{
				if(chuan[begin]!=chuan[end])
				{
					break;
				}
				else
				{
					begin++;
					end--;
				}
			if(begin>=end)
			{
				for(int a=i;a<=j;a++)
				{
					cout<<chuan[a];
				}
				cout<<endl;
			}
			}
		}
	}
	return 0;
}


int main()
{
    char str[500]={' '};
    cin >> str;
    int len=strlen(str);
    int i,j,k;
    int m;
    float leap;
    for (i=2;i<=len;i++)
    {
       if (i%2==0)  {leap=0.5;}
       else {leap=0;}
                   for (j=0;j<=len-i;j++)
            {
                m=1;
                for (k=j;k<j+(i-1)/2+leap;k++)
                {
                    if (str[k]!=str[2*j+i-1-k])
                    {
                        m=0;
                        break;
                    }
                }
                if (m==1)
                {
                    for (k=j;k<=j+i-1;k++)
                    {
                        cout << str[k];
                    }
                    cout << endl;
                }

        }
    }

    return 0;
}


char a[1000] ;
void huiwen(int) ;

int main()
{
	cin.getline (a , 1000) ;
	huiwen(2) ;
	return 0 ;
}

void huiwen (int x)
{
	if (x < strlen(a))
	{
		int i , j , k ;
		for (i = 0 ; i < strlen(a) - x + 1 ; i++)
		{
			for (j = 0 ; j <= (x - 1) / 2 ; j++)
				if (a[i + j] != a[i + x - 1 - j]) break ;
			if (j == ( x - 1 ) / 2 + 1)
			{
				for (k = i ; k <= i + x - 1 ; k++)
					cout << a[k] ;
				cout << endl ;
			}
		}
		huiwen (x + 1) ;
	}
}


char s[600];
int main()
{
	int comp(int sta,int lenx);
	int i,j,len,p;
	gets(s);
	len=strlen(s);
	for (i=2; i<=len; i++)
		for (j=0; j<=len-i; j++)
			if (comp(j,i)==1) {
				for (p=j; p<=j+i-1; p++) printf("%c",s[p]);
				printf("\n");
			}
	return 0;
}
int comp(int sta,int lenx)
{
	int i,j;
	for (i=1; i<=lenx/2; i++) if (s[sta+i-1]!=s[sta+lenx-i]) return (0);
	return (1);
}


int main()
{
	char a[501];
	int len,s=0;
	cin.getline(a,501);
	len = strlen(a);
	for(int i=2;i<len;i++)
		for(int j=0;j<=len-i;j++)
		{	for(int k=0;k<=i/2-1;k++)
			{
				if(a[j+k]==a[j+i-1-k])
					s++;

			}
		if(s==i/2)
			{for(int m=j;m<=j+i-1;m++)
			cout<<a[m];
			cout<<endl;

		}
		s=0;
		}
	return 0;
}


int judge(char ch[500])
{
	int len=strlen(ch);
	for(int i=0;i<=len/2;i++)
	{
		if(ch[i]!=ch[len-1-i])
			return 0;
	}
	return 1;
}
int main()
{
	char a[500]={'\0'},b[500]={'\0'};
	cin>>a;
	int j,k,len,i;

	len=strlen(a);
	//cout<<len<<endl;
	for(i=2;i<=len;i++){
		j=0;
		while(j<=len-i)
		{
			for(k=0;k<i;k++)
			{
				b[k]=a[j+k];
			}
			b[k]='\0';
			if(judge(b))
				cout<<b<<endl;
			j++;
		}
	}
	return 0;
}


int main()
{
	int len, i, j, k, q, flag = 0;
	char a[500];
	cin >> a;
	len = strlen(a);
	for (i = 2; i <= len; i++)
	{
		for (j = 0; j <= len - i; j++)
		{
			k = 0;
			while (a[j + k] == a[j + i - 1 - k] && k < i)
			{
				k++;
			}
			if (k == i)
			{
				if (flag == 0)
					flag = 1;
				else
					cout << '\n';
				for (q = 0; q < i; q++)
				{
					cout << a[j + q];
				}
			}
		}
	}
	return 0;
}


int main()
{
    char a[1000],b[1000][1000],c[1000][1000];
    int i,j,k,num=0,clen[1000],clen0[1000],p=0,shorter;
    cin>>a;
    int len=strlen(a);
    for(i=0;i<len;i++)
    {
        for(j=i;j<len;j++)
        {
            p=0;
            for(k=i;k<=j;k++)
            {
                b[num][p]=a[k];
                p++;
            }
            num++;
        }
    }
    int judge=0;
    for(i=0;i<num;i++)
    {
        clen[i]=strlen(b[i]);
        j=0;judge=0;
        while(1)
        {
            if(b[i][j]==b[i][clen[i]-j-1])
            {
                judge=1;
                j++;
                if(j==clen[i]) break;
                continue;
            }
            else
            {
                judge=0;
                break;
            }
        }

        if(judge==1&&clen[i]>1)
        {
            strcpy(c[p],b[i]);
            clen0[p]=clen[i];
            p++;
        }
    }
    shorter=0;
    for(i=0;i<p;i++)
    {
        for(j=0;j<p;j++)
        {
            if(clen0[j]<clen0[shorter])
            {
                shorter=j;
            }
        }
        cout<<c[shorter]<<endl;
        clen0[shorter]=1000;
    }

    return 0;
}


void pause()
{int n;
scanf("%d",&n);
}

void find_huiwen(char*str,int len,int n)
{void reverse(char*huiwen,char*rev,int geshu);
char * huiwen;
huiwen=(char*)malloc((len+1)*sizeof(char));
char * rev;
rev=(char*)malloc((len+1)*sizeof(char));

int i,j;

for(i=0;i<=n-len;i++)
	{for(j=0;j<=len-1;j++)
		{huiwen[j]=*(str+i+j);
		}
	huiwen[len]='\0';
	reverse(huiwen,rev,len);//rev???
	if(strcmp(rev,huiwen)==0)
	printf("%s\n",huiwen);
	}
}
void reverse(char*huiwen,char*rev,int geshu)
{
int j;
for(j=0;j<=geshu;j++)
{rev[j]=huiwen[geshu-1-j];
}
rev[geshu]='\0';
}

int main()
{//void pause();
char str[500];
int n;
scanf("%s",str);
n=strlen(str);
//???????
int i;

for(i=2;i<=n;i++)
	find_huiwen(str,i,n);

pause();
	return 0;
}


int main()
{
	char a[500];
	int i,j,k,m;
	gets(a);
	int len=strlen(a);
	for(i=2;i<=len;i++)
	{
		for(j=0;j<=len-i;j++)
		{
			for(k=0;k<i;k++)
			{
				if(a[j+k]!=a[j+i-1-k])
					break;
			}
			if(k==i)
			{
				for(m=0;m<i;m++)
					putchar(a[j+m]);
				printf("\n");
			}
		}
	}
	return 0;
}


char *reverse(char *pt);
int main()
{
	char source[501];
	char sub[501];
	char term[501];
	int len;
	int sublen;
	char *p=source;
	gets(source);
	len=strlen(source);
	for(sublen=2;sublen<=len;sublen++)
	{
		for(p=source;p<source+len-sublen+1;p++)
		{
			strncpy(sub,p,sublen);
			sub[sublen]='\0';
			strcpy(term,sub);
			if(strcmp(sub,reverse(term))==0)
				printf("%s\n", sub);
		}
	}
	return 0;
}
char *reverse(char *pt)
{
	char term[501];
	int i;
	strcpy(term,pt);
	for(i=0;i<strlen(pt);i++)
		pt[i]=term[strlen(pt)-i-1];
	return pt;
}


int t,i;
char a[100];
char b[10000][100];
void f(int x)
{int u=1;
	int tt=strlen(b[x]);
	for(int q=0;q<tt;q++)
	{if(b[x][q]!=b[x][tt-q-1])
		{u=0;break;}
	}if(u==1)cout<<b[x]<<endl;
	return;
}
int main()
{int num=0;
    cin>>a;
    t=strlen(a);
    for(int j=2;j<=t;j++)
    {for(i=0;i<t-j+1;i++)
    {num++;
    	for(int k=0;k<j;k++)
    	{
    		b[num][k]=a[i+k];
    	}f(num);
    }
    }
    return 0;
}


/*         ????
??????        2010.11.24      */

void f(int sta,int len,char a[])
{
	int g=0,i;
	for(i=0;i<len-1-i;i++)
		if(a[i+sta]!=a[sta+len-1-i])
		{
			g=1;
			break;
		}
	if(g==0)
	{
		for(i=sta;i<sta+len;i++)
			cout<<a[i];
		cout<<endl;
	}
}

int main()
{
	int len,sta;
	char a[503]={'\0'};
	cin.getline(a,sizeof(a));
	for(len=2;len<=strlen(a);len++)
		for(sta=0;sta+len<=strlen(a);sta++)
			f(sta,len,a);
	return 0;
}


/*
 * huiwen_zichuan.cpp
 *
 *  Created on: 2014-1-4
 *      Author: ??
 */
int main(){
	char a[600];
	cin>>a;
	int n,i;int j;
	int l=strlen(a);
	for(n=2;n<=l;n++){
		for(i=0;i<l-1;i++){
			if(i+n-1>=l){break;}
			for(j=0;i+j<i+n-1-j;j++){
				if(a[i+j]!=a[i+n-1-j]){break;}
			}
			if(a[i+n-1-j]==a[i+j]&&(i+n-1-j)-(i+j)<3){
				for(int ii=i;ii<=i+n-1;ii++)cout<<a[ii];
				cout<<endl;
			}
		}
	}
	return 0;
}


int main()
{

char a[100001];
int  length,i,j,len,check,t;
scanf("%s",&a);
len=strlen(a);
    for(length=2;length<=len;length++)
	{
	      for(i=0;i<len;i++)
		  {
			  check=0;
		       for(j=0;j<=length/2;j++)
			   {
			           if(a[i+j]!=a[i+length-1-j])
					   {
					     check=1;
						 break;
					   }

			   }
			   if(check==0)
			   {
			      for(t=0;t<length;t++)
                      printf("%c",a[i+t]);
			   }
          printf("\n");
		  }

	}
return 0;
}


int jodge(char s[501],int x,int y)
{
    int i,k=0;
    for(i=x;i<x+(y-x+1)/2;i++)
    {
        if(s[i]!=s[y+x-i])
            return 0;
        else
            k++;
    }
    if(k==(y-x+1)/2)
        return 1;
    else
        return 0;
}
void f(char s[501],int x)
{
     int j,i,k;
     for(i=2;i<=x;i++)
     {
         for(j=0;j<x+1-i;j++)
         {
            if(jodge(s,j,j+i-1)==1)
            {
                for(k=j;k<=j+i-1;k++)
                 printf("%c",s[k]);
                 printf("\n");
             }
         }
     }

}
int main()
{
    char s[501];
    int i,j,k,t;
    scanf("%s",s);
    k=strlen(s);
    f(s,k);
    return 0;
}


int main()
{
	char str1[500], str2[500];
	int i, j, length, k = 0, m = 0, n, flag = 0;
	cin >> str1;
	for(length = 2; length <= strlen(str1); length++)
	{
		for(i = 0; i <= strlen(str1) - length; i++)
		{
			for(j = i; j <= i + length - 1; j++)
			{
				str2[k++] = str1[j];
			}
			k = 0;
			for(m = 0; m <= length - 1; m++)
			{
				if(str2[m] != str2[length - 1 - m])
				{
					flag = 1;
					break;
				}
			}
			if(flag == 0)
			{
				for(n = 0; n <= length - 1; n++)
					cout << str2[n];
				cout << endl;
			}
			flag = 0;
		}
	}
	return 0;
}


int main()
{
	char a[520],b[520]={0};
	int length,i,j,k;
	int hui(char b[]);
	gets(a);
	length=strlen(a);
	for(i=2;i<=length;i++)
	{
		for(j=0;j<=length-i;j++)
		{
			for(k=0;k<i;k++)
			{
				b[k]=a[j+k];
			}
			if(hui(b)==1)
			{
				printf("%s\n",b);
			}
			else continue;
		}
	}
	return 0;
}
int hui(char b[])
{
	int i;
	for(i=0;i<strlen(b);i++)
	{
		if(b[strlen(b)-1-i]!=b[i])
		{
			break;
		}
	}
	if(i==strlen(b)) return 1;
	else return 0;
}


char l[500];
int len,n=0,record[2000][3];
main()
{
int i,j,k;
void doit(int a,int b);
gets(l);
len=strlen(l);
for (i=0;i<=len-1;i++)
  doit(i,i+1);
for (i=2;i<=len;i++)
 for (j=1;j<=n;j++)
 if (record[j][2]-record[j][1]+1==i){ for (k=record[j][1];k<=record[j][2];k++) printf("%c",l[k]); printf("\n");}

}

void doit(int a,int b)
{
int i,j;
if (l[a]==l[b]&&a-1>=0&&b+1<=len-1) {n++;record[n][1]=a;record[n][2]=b;doit(a-1,b+1);}
if (l[a]==l[b]&&(a==0||b==len-1)) {n++;record[n][1]=a;record[n][2]=b;}
}


char s[500];
void huiwen(int n,int l)
{
	    int k,i,j,e,sum=0;
		for(k=0;k<l-n+1;k++)
		{
			e=k+n-1;
			for(j=k;j<n/2+k;j++,e--)
			{
			    if(s[j]==s[e]) sum++;
			    if(s[j]!=s[e])
			    {
			    	sum=0;
			    	break;
			    }
			    if(sum==n/2)
			    {
				    for(i=k;i<n+k;i++)
					    cout<<s[i];
				    cout<<endl;
				    sum=0;
			    }
			}
		}
}
int main()
{
     int m,l;
     cin.getline(s,500);
     l=strlen(s);
     for(m=2;m<l;m++)
    	 huiwen(m,l);
     return 0;
}


// ????.cpp : Defines the entry point for the console application.
//

void out();
char num[501];

int main()
{

	cin.getline( num + 1,501);

	out();

	return 0;

}

void out()
{
	int i = 0;
	int leng = 0;
	int t = 0;
	int m = 0;
	int k = 0;
	int panduan = 0;

	int len = 0;
	len = strlen( num + 1 );

	for( leng = 2;leng <= len;leng++ )
	{
		m = leng / 2 ;
		for( i = 1;i <= len - leng + 1;i++ )
		{
			panduan = 0;
			k = i + leng;
			for( t = i;t < i + m;t++ )
			{
				k --;
				if( num[t] != num[k] )
				{
					panduan = 1;
					break;
				}
			}

			if( panduan == 0 )
			{
				for( t = i;t < i + leng;t++ )
					cout << num[t];
				cout << endl;
			}

		}

	}

}


void substr(char s[],int start,int end)
{
	int a=start,b=end,i;
	while ((end>start)&&(s[start]==s[end]))
	{
		start++; end--;
	}
	while(start>end)
	{
		for(i=a;i<=b;i++) putchar(s[i]);
		start=start-1;
		putchar('\n');
	}
}
void sub(char s[],int start,int end)
{
	int a=start,b=end,i;
	while ((end>start)&&(s[start]==s[end]))
	{
		start++; end--;
	}
	while(start>=end)
	{
		for(i=a;i<=b;i++) putchar(s[i]);
		start=start-1;
		putchar('\n');
	}
}
void main ()
{
	char s[500];
	int m,n,width,start;
	gets(s);
	n=strlen(s);
	for(width=1; width<n; width++)
		for(m=0; m<=n-width;m++)
			if(n%2==0)
				substr(s,m,m+width);
			else
				sub(s,m,m+width);
}


int main()
{
	int i,j,n,r,flag,k;
	char a[501],b[501];
	gets(a);
	n=strlen(a);
	for(i=2;i<=n;i++)
	{
		for(j=0;j+i-1<n;j++)
		{
			flag=0;
			for(k=1;k<=i;k++)
			{
				if(a[j+k-1]==a[j+i-k])
					continue;
				else
				{
					flag=1;
					break;
				}
			}
			if(flag==0)
			{
				for(r=1;r<=i;r++)
					printf("%c",a[j+r-1]);
				printf("\n");
			}
		}
	}
	return 0;
}


/*
 * fx01.cpp
 *
 *  Created on: 2013-1-11
 *      Author: SONY
 */
int main(){
	char str[501];
	cin>>str;
	int len;
	len=strlen(str);
    int i,j;
    for(i=2;i<=len;i++)
    {
    	for(j=0;j<=len-i;j++)
    	{
    		int m,k,t,b=0;
    			k=j;
    			t=j+i-1;
    			for(m=1;m<=i/2;m++)
    			{
                    if(str[k]==str[t])
                    {
                    	b++;
                    	k++;
                    	t--;
                   	}
                    else break;
    			}
    			if(b==i/2)
    			{
    				for(m=j;m<=j+i-1;m++)
    				{
    					cout<<str[m];
    				}
    				cout<<endl;
    			}
    			b=0;
    		}
    }
    return 0;
}


void  Palindrome(char []);
int main()
{
	char str1[500];
	cin >> str1;
	Palindrome(str1);
	return 0;
}
void  Palindrome(char str1[])
{
	int i, k, m, n, a, b;
	m = strlen(str1);
	for (i = 1; i < m; i++)
	{
		for (k = 0; k < m; k++)
		{
			for (a = k,b = k + i; a < b; a++,b--)
			{
				if (str1[a] != str1[b])
					break;
			}
			if (a == b + 1 || a == b)
			{
				for(n = k; n <= k + i; n++)
				{
					cout << str1[n];
				}
				cout << endl;
			}
		}
	}
}


int main()
{
	int i,j,k,n,flag,m;
	flag=0;
	char str[500];
	gets(str);
	n=strlen(str);
	char *p;
	for(i=2;i<=n;i++)
	{
			p=str;
			for(j=0;j<=n-i;j++)
			{
				for(k=j;k<(j+j+i)/2;k++)
				{
					if(str[k]==str[j+j+i-1-k])
						flag=1;
					else
					{
						flag=0;
						break;
					}
				}
				if(flag==1)
				{
					for(m=j;m<=j+i-1;m++)
					{
						printf("%c",str[m]);
					}
					printf("\n");
				}
			}
	}
}


int maxhui(char chuan[], int i)
{
	int k, length = 2;
	for(k = i ;  ; k ++)
	{
		if(chuan[k] == chuan[k - length + 1])
			length += 2;
		else break;
	}
	length -= 2;
	return length;
}

int main()
{
	char chuan[500], huichuan[500][500];
	int i, j, k = 0, length, p;
	cin.getline(chuan, 500, '\n');
	for(i = 1 ; i < strlen(chuan) ; i ++)
	{
		if(chuan[i] ==  chuan[i - 1])
		{
			length = maxhui(chuan, i) / 2;
			for(j = 0 ; j < length ; j ++)
				huichuan[k][j] = chuan[i + j];
			huichuan[k][length] = '\0';
			k++;
		}
	}
	int maxlen[500], maxlength = 0;
	for(i = 0 ; i < k ; i ++)
	{
		if(strlen(huichuan[i]) > maxlength)maxlength = strlen(huichuan[i]);
	}
	for(i = 0 ; i < maxlength ; i ++)
	{
		for(j = 0 ; j < k ; j ++)
		{
			if(strlen(huichuan[j]) > i)
			{
				for(p = i ; p >= 0 ; p --)
				{
					cout << huichuan[j][p];
				}
				for(p = 0 ; p <= i ; p ++)
				{
					cout << huichuan[j][p];
				}
				cout << endl;
			}
		}
	}
	return 0;
}


int p,q;
int flag;
char input[100] ;
int judge(int i,int l)
{
    flag = 0 ;
    for (p=i;p<(l/2+i);p++)
       {
           if(input[p] == input[l+2*i-p-1])
                flag++;
       }
    if(flag == l/2)  return 1;
    else return 0;
}
int main()
{
    cin>>input;
    int length = strlen(input) ;
    int k , d ,w ;
    for( d=2;d<=length;d++)
    for (k=0;k<length-1;k++)

           {
               if(judge(k,d)==1)
                   {
                       for (w=k;w<k+d;w++)
                          {
                              cout<<input[w];
                          }
                          cout<<endl;
                   }
           }

}


int main()
{
	char s[501];
	int i, j, t;
	cin.getline(s,501);
	int l = strlen(s);
	for (i = 2;i <= l ;i++)
	{
		for (j = 0;j <= l - i;j++)
		{
			for (t = j;t <= j + i / 2 - 1 ;t++)
			{
				if (s[t] != s[2 * j + i - 1 - t])
					break;
			}
			if (t == j + i / 2 )
			{
				for (int k = j;k <= j + i - 1;k++)
				{
					cout << s[k];
				}
				cout << endl;
			}
		}
	}

	return 0;
}


void run(int i, char a[500])
{
	int j, k, l;
	char b[500], c[500];
	for (j = 0; j  < 500; j++)
	{
		b[j] = '\0';
		c[j] = '\0';
	}
	int len = strlen(a);
	for (j = 0; j <= len - i; j++)
	{
		for (k = 0; k < i; k++)
			b[k] = a[j + k];
		for (l = 0; l < i; l++)
			c[l] = b[strlen(b) - l - 1];
		for (k = 0; k < i; k++)
		{
			if (b[k] != c[k]) break;
		}
		if (k == i)
		{
			for (k = 0; k < i; k++)
				cout << b[k];
			cout << endl;
		}
	}
}
int main()
{
	int i, len;
	char a[500];
	cin.getline(a,500);
	len = strlen(a);
	for(i = 2; i <= len; i++)
	{
		run(i,a);
	}
	return 0;
}


int main()
{
	char array[501];
	cin.getline(array,501);
	int k,l,i,s=0;
	for(i=0;i<strlen(array)-1;i++)
	{
		if(array[i]==array[i+1])
		{
			cout<<array[i]<<array[i+1]<<endl;
		}
	}
	for(l=3;l<strlen(array);l++)
	{
		for(k=0;k<strlen(array)-l;k++)
		{
			for(i=0;i<=l/2;i++)
			{
				if(array[k+i]!=array[k+l-i])
				{
					s++;
					break;
				}
			}
			if(s==0)
			{
				for(i=0;i<=l;i++)
				{
					cout<<array[k+i];
				}
				cout<<""<<endl;
			}
			s=0;
		}
	}
	return 0;
}


int main()
{
    char substr(char s[],int,int);
    char osubstr(char s[],int,int);
    int len,width,m;
    char s[1000];
    gets(s);
    len=strlen(s);
    for (width=1; width<=len; width++) {
        for (m=0; m<=len-width; m++) {
            if (substr(s, m, m+width)) {
                osubstr(s, m, m+width);
            }
        }
    }
    return 0;
}

char substr(char s[],int start,int end)
{
    while ((end>start)&&(s[start]==s[end])) {
        start++;
        end--;
    }
    if (end>start) {
        return 0;
    }
    else
        return 1;
}

char osubstr(char s[],int start,int end)
{
    while (start<=end) {
        putchar(s[start++]);
    }
    putchar('\n');
}


void maxhui(char huichuan[500], char chuan[], int i)
{
	int k, l = 1;
	for(k = i ;  ; k ++)
	{
		if(chuan[k] == chuan[k - 2 * l + 1])
		{
			huichuan[l - 1] = chuan[k];
			l = l + 1;
		}
		else break;
	}
	huichuan[l - 1] = '\0';
}

int main()
{
	char chuan[500], huichuan[500][500];
	int i, j, k = 0, length, p;
	cin.getline(chuan, 500, '\n');
	for(i = 1 ; i < strlen(chuan) ; i ++)
	{
		if(chuan[i] ==  chuan[i - 1])
		{
			maxhui(huichuan[k], chuan, i);
			k++;
		}
	}
	int maxlen[500], maxlength = 0;
	for(i = 0 ; i < k ; i ++)
	{
		if(strlen(huichuan[i]) > maxlength)maxlength = strlen(huichuan[i]);
	}
	for(i = 0 ; i < maxlength ; i ++)
	{
		for(j = 0 ; j < k ; j ++)
		{
			if(strlen(huichuan[j]) > i)
			{
				for(p = i ; p >= 0 ; p --)
				{
					cout << huichuan[j][p];
				}
				for(p = 0 ; p <= i ; p ++)
				{
					cout << huichuan[j][p];
				}
				cout << endl;
			}
		}
	}
	return 0;
}


int main()
{
	char c[500];
	cin>>c;
	for(int i=2;i<=strlen(c);i++)
	{
		for(int j=0;j<=strlen(c)-i;j++)
		{
			int p=1;
			for(int k=j;k<j+i/2;k++)
			{

				if(c[k]!=c[j+j+i-1-k])
				{
					p=0;
					break;
				}

			}
			if(p==1)
			{
				for(int o=j;o<j+i;o++)
				{
					cout<<c[o];
				}
				cout<<endl;
			}
		}
	}

	return 0;
}


int main()
{
  char a[500];
  cin.getline(a,500);
  int i,j,k=1,l;
  l=strlen(a);
  while(k<l)
  {

    for(i=0,j=k; j<l; i++,j++)
        {
			int begin=i,end=j;
			while(begin<end)
            {
				if(a[begin]!=a[end]) break;
				else
                {
					begin++;
					end--;
				}
			}
			if(begin>=end)
            {
				int print=i;
				for(print; print<=j; print++)
					cout<<a[print];
				cout<<endl;
			}
		}
    k++;
  }
  cin.get();cin.get();cin.get();
  return 0;
}


int main()
{
int judge(int s,int e,char a[]);
void print(int s,int e,char a[]);
int n,m=1,i,j;
char a[500];
scanf("%s",a);
n=strlen(a);
//printf("%d \n",n);
//printf("%s \n",a);
for(i=1;i<=n-1;i++)
{
    for(j=0;j<=n-i-1;j++)
    {
    int q;
    q=judge(j,j+i,a);
    if(q==1&&m==1)
        {print(j,j+i,a);m++;}
    else if(q==1&&m!=1)
        {printf("\n");print(j,j+i,a);}
    }

}
return 0;
}
int judge(int s,int e,char a[500])
{
    if (s >= e) return 1;
    else if(a[s]!=a[e])
    return 0;
    else if(a[s]==a[e])
    {
        s++;e--;
        return judge(s,e,a);
    }
}
void print (int s,int e,char a[])
{
    int i;
    for(i=s;i<=e;i++)
    printf("%c",a[i]);
}


int main()
{
 char str[500];
 int i,j,len,n,t,k;
 gets(str);
 len=strlen(str);
 for(n=2;n<=len;n++)
 {
 for(i=0;i+n-1<len;i++)
 {
     t=i;
     for(j=i+n-1;t<j;j--,t++)
     {
  if(str[t]!=str[j])
  {
   break;
  }
  else
  if((j==t+1)||(j==t+2))
  {
  for(k=i;k<=i+n-1;k++)
  printf("%c",str[k]);
  printf("\n");
  }
     }
 }
 }
 return 0;
}


int i , l ;
char str[501];
void f(int number,int length);
int main()
{
	int lenth;
	gets(str);
	lenth = strlen(str);
	for( l = 2 ; l <=  lenth - 1 ; l++)
		for( i = 0 ; i <= lenth - 2 ; i ++)
		{
			if( i + l - 1 <= lenth)
				f(i , l);
		}
	return 0;
}
void f(int number,int length)
{
	int j ;
	if(length <= 0 )
	{
		for(j = i ; j <= i + l - 1 ; j ++)
			printf("%c", str[j])  ;
			printf("\n");
	}
	else if( str[number] == str[number + length - 1] )
		f(number + 1 , length - 2);
	return;
}


void output(int);
char word[500];
int len;
int main()
{
	int i;
	cin.getline(word, 500);
	len = strlen(word);
	for (i = 2; i <= len; i++)
		output(i);
	return 0;
}

void output(int i)
{
	int j, k;
	for (j = 0; j <= len - i; j++)
		{
			k = j;
			while (word[k] == word[2 * j + i - 1 - k] && k < 2 * j + i - 1 - k)
				k++;
			if (k >= 2 * j + i - 1 - k)
			{
				for (k = j; k < j + i; k++)
					cout << word[k];
				cout << endl;
			}
		}
}


int main()

{
	int l;
	char p[505];
	int b, w;
	int i;
	int flag;

	cin >> p;

	l = strlen(p);

	for(w = 2; w <= l; w ++)
		for(b = 0; b <= l - w; b ++)
		{
			flag = 1;

			for(i = 0; i < w / 2 + 1 ; i++)
			{
				if(p[b + i] != p[b + w - 1 - i])
				{
					flag = 0;
					break;
				}
			}

			if(flag == 1)
			{
				for(i = b; i < b + w; i ++)
					cout << p[i];

				cout << endl;
			}
		}

		return 0;
}


int isgoodsubstr( char * s, int l, int r )
{
	if ( l > r )
		return -1;//wrong!
	int i = l, j = r;
	for ( ; i < j; i++, j-- )
		if ( s[i] != s[j] )
			return 0;
	return 1;
}

int main()
{
	char s[501];
	gets(s);
	int i = 0, j = 0, l = strlen(s);
	int k = 0;
	for ( i = 2; i <= l; i++ )
	{
		for ( j = 0; j+i-1 < l; j++ )
		{
			if ( isgoodsubstr( s, j, j+i-1 ) == 1 )
			{
				for ( k = j; k <= j+i-1; k++ )
					putchar(s[k]);
				putchar('\n');
			}
		}
	}
	return 0;
}


void main()
{
	char a[100];
	int l,i,j,k,len,flag;
	scanf("%s",a);
	len=strlen(a);
	for (l=2;l<len;l+=2)
	{
		for(i=0;i<len;i++)
		{
			for(j=0;j<l/2;j++)
			{
				if(a[i+j]==a[i+l-1-j]) flag=1;
				else
				{
					flag=0;
					break;}
			}
			if (flag==1)
			{
				for(k=i;k<i+l;k++)
					printf("%c",a[k]);
				printf("\n");
			}
		}
	}
}

	//	abcddcbaab


void judge(int start,int l);
char str[505];
int main()
{
	cin>>str;
	int l=strlen(str);
	for(int i=2;i<=l;i++)
	{
		for(int j=0;j<=l-i;j++)
		{
			judge(j,i);
		}
	}
	return 0;
}
void judge(int start,int l)
{
	int flag=1;
	for(int i=0;i<l/2;i++)
	{
		if(str[start+i]!=str[start+l-1-i])
		{
			flag=0;
			break;
		}
	}
	if(flag==1)
	{
		for(int i=start;i<start+l;i++)
		{
			cout<<str[i];
		}
		cout<<endl;
	}
}


int main ()
{
	char c[500];
	int i, j, k, len, flag;
	cin.getline(c,500);
	len = strlen(c);
	for (i = 2; i <= len; i++)
	{
		for (j = 0; j <= len - i; j++)
		{
			flag = 1;
			for (k = 0; k < (i + 1) / 2; k++)
			{
				if (c[j + k] != c[j + i - 1 - k])
				{
					flag = 0;
					break;
				}
			}
			if (flag)
			{
				for (k = 0; k < i; k++)
					cout << c[j + k];
				cout << endl;
			}
		}
	}
	return 0;
}


int main()
{
	char a[501];

	int i,n,k,j,flag,nf=0;
	gets(a);
	n=strlen(a);
	for(i=2;i<=n;i++)
	{
		for(j=0;j<n-i+1;j++)
		{
			flag=1;
			for(k=0;k<i/2;k++)
			{
				if(a[j+k]!=a[j+i-1-k])
				{
					flag=0;
					break;
				}
			}
			if(flag)
				{
					if(nf)
						printf("\n");
					for(k=0;k<i;k++)
						printf("%c",a[j+k]);

					nf=1;
				}
		}
	}
	return 0;
}


int judge(char front[MAX-1],int m)
{
	int i,out;
	char back[MAX-1]={""};
	for(i=0;i<m;i++)
	{
		back[i]=front[m-i-1];
	}
	if(strcmp(back,front)==0)
	{
		out=1;
	}
	else
		out=0;
	return out;
}

int main()
{
	int len,i,j,k;
	char s[MAX];
	scanf("%s",&s);
	len=strlen(s);
	for(i=2;i<=len;i++)
	{
		char son[MAX-1][MAX-1]={""};
		for(j=0;j<=len-i;j++)
		{
			char *p=&s[j];
			for(k=0;k<i;k++)
			{
				son[j][k]=*p;
				p++;
			}
		}
		for(j=0;j<=len-1;j++)
		{
			int out;
			out=judge(son[j],i);
			if(out==1)
			{
				for(k=0;k<i;k++)
					printf("%c",son[j][k]);
				printf("\n");
			}

		}
	}
	return 0;
}


int ishuiwen(char p[],int x)
{
	int j,result=0;
	char q[505]={""};
	for(j=0;j<x;j++)
		q[j]=p[x-j-1];
    if(strcmp(p,q)==0)
		result=1;
	return result;
}

int main()
{
	char a[505],b[505]={""};
	int i,len,j,k;
	gets(a);
	len=strlen(a);
    for(i=2;i<=len;i++)
		for(j=0;j<len+1-i;j++)
		{
			for(k=0;k<i;k++)
				b[k]=a[k+j];
			if(ishuiwen(b,i))
				printf("%s\n",b);
		}
	return 0;
}


main ()
{
	char a[500];
	int i, j, k, s, l, flag;
	cin >> a;
	l = strlen(a);
	for(i = 2; i <= l; i++)
	{
		for (j = 0; j <= l - i; j++)
		{
			flag = 1;
			for (k = 0; k < i / 2; k++)
			{
				if (a[j + k] != a[j + i - k - 1])
				{
					flag = 0;
					break;
				}
			}
			if(flag)
			{
				for (s = 0; s < i; s++)
					cout << a[j + s];
				cout << endl;
			}
		}
	}
	return 0;
}


int main()
{
	char a[505];
	int i,j,k;
	gets(a);
	for(i=2;i<strlen(a);i++)
		for(j=0;j<=strlen(a)-i;j++)
		{
			for(k=0;k<i;k++)
				if(a[k+j]!=a[i+j-1-k]) break;
			if(k==i)
			{
				for(k=j;k<i+j;k++)
					printf("%c",a[k]);
				printf("\n");
			}
		}
	return 0;
}


void huiwen(int i, int l, char a[501])
{
	int j, k, flag = 0;
	for (j = 0; j <= l - i; j ++)
	{
		flag = 1;
		for (k = 0; k <= i - 1; k ++)
		{
			if (a[j+k] != a[j+i-1-k])
				flag = 0;
		}
		if (flag)
		{
			for (k = 0; k <= i - 1; k ++)
				cout << a[j+k];
			cout << endl;
		}
	}
}
int main()
{
	char a[501];
	cin >> a;
	int i, l;
	l = strlen(a);
	for (i = 2; i <= l; i ++)
	{
		huiwen(i, l, a);
	}
	return 0;
}


int p=1;
int f(char str[500],int lens);
int main()
{
	char str[500],lens;
	cin.getline(str,500);
	lens=strlen(str);
	f(str,lens);
	return 0;
}
int f(char str[500],int lens)
{
	int i,j,flag=0,k=p;
	for(i=0;i<lens;i++)
	{
		while(str[i-k+1]==str[i+k]&&(i-k+1)>=0&&i+k<lens&&k>0)
		k--;
		if(k==0)
		{
			flag=1;
			for(j=i-p+1;j<=i+p;j++)
				cout<<str[j];
			cout<<endl;
		}
		k=p;
	}
	p++;
	if(flag==1)
		f(str,lens);
	else
		return 0;
}


main()
{
      char a[800];
      int len,num=0;
      gets(a);
      len=strlen(a);
      for(int i=1;i<len;i++)
      {
              for(int j=0;j<len-i;j++)
              {
                     for(int k=j;k<=(j+i/2);k++)
                     {
                             if(a[k]==a[j+j-k+i])
                                num++;
                             else
                             {
                                 num=0;
                                 break;
                             }
                     }
                     if(num==i/2+1)
                     {
                                   for(int k=j;k<=i+j;k++)
                                    printf("%c",a[k]);
                                   printf("\n");
                     }
                     num=0;
              }
      }
}


int main()
{
	int judge(char ch[]);
	char str[501],sub[501];
	int len,start,end,i,l;
	gets(str);
	len=strlen(str);
	for(l=2;l<=len;l++) //????2???????
	{
		for(start=0,end=start+l;end<=len;start++,end++) //?start?????????end????
		{
			for(i=start;i<end;i++)
			{
				sub[i-start]=str[i]; //?????
			}
			sub[end-start]='\0';
            if(judge(sub)==1)//??????????????
			{
				puts(sub);
				printf("\n");
			}
		}
	}
	return 0;
}

int judge(char ch[])
{
	int begin,finish,lenth;
	lenth=strlen(ch);
	for(begin=0,finish=lenth-1;begin<finish;begin++,finish--)
	{
		if(ch[begin]!=ch[finish]) //???????????????????????????????????????begin?=finish???
		{
			return(0); //???????????????????0?
		}
	}
	return(1);//???????0?????????????1?
}


char ls[MAX];
int pafind(int start,int len);

int main(){
	int len;
	cin>>ls;
	len=strlen(ls);
	for(int ll=2;ll<=len;ll++){
		for(int i=0;i<=len-ll;i++){
			if(pafind(i,ll)){
				for(int j=i;j<i+ll;j++) cout<<ls[j];
				cout<<endl;
			}
		}
	}
	return 0;
}
int pafind(int start,int len){
	int maxl=len/2,ok=1;
	for(int i=start;i<start+maxl;i++){
		if(ls[i]!=ls[start+len-1-(i-start)]){
 			ok=0;
			break;
		}
	}
	return ok;
}


int ju(char str[],int j,int k)
{
	int p,m=1;
	for(p=k;p<=k+j-1;p++)
	{
		if(str[p]!=str[2*k+j-1-p])
		{
			m=0;
		}
	}
	return m;
}
void main()
{
	char str[501];
	char c;
	int i=1,j,k,l;
	while((c=getchar())!='\n')
	{
		str[i]=c;
		i++;
	}
	i--;
	for(j=2;j<=i;j++)
	{
		for(k=1;k<=i-1;k++)
		{
			if(ju(str,j,k)==1)
			{
				for(l=k;l<=k+j-1;l++)
					printf("%c",str[l]);
				printf("\n");
			}
		}
	}
}


/*
 * palindrome substring.cpp
 *
 *  Created on: 2011-12-28
 *      Author: Administrator
 */
int main()
{
	char sen[510];int j,n,k,m,length;//????
	cin.getline(sen,510);
	length=strlen(sen);
	for(n=1;n<=length;n++)//?????????
		for(j=0;j<=length-1-n;j++)//?????????
		{
			m=j;
			k=j+n;
			while(k>=m&&sen[k]==sen[m])//???????
			{
				k--;m++;
			}
			if(k<=m)
			{
				for(k=j;k<=j+n;k++){cout<<sen[k];}cout<<endl;//????
			}
		}
	return 0;
}


int main()
{
	char str[501];
	gets(str);

	int len=0;
	while(str[len])
		len++;
    int l=2;
	int i,j;
	char y;
	for(l=2;l<=len;l++)
    {
		i=0;
		for(i=0;i<len-l+1;i++)
        {
			y='y';
			for(j=i;j<l+i;j++)
				if(str[j]!=str[l+2*i-1-j])
					y='n';
			if(y=='y')
			{
				for(j=i;j<l+i;j++)
					printf("%c",str[j]);
                printf("\n");
			}
		}
	}

    return 0;
}


int main()
{
	char str[500]={0},result[500]={0};
	int i,j,sum,p,len,x;
	scanf("%s",str);
	len=strlen(str);
	for(i=1;i<=len;i++){//??
		for(j=0;j<=len-i;j++){//??
			x=-1;
			for(p=0;p<500;p++)
				result[p]='\0';
			for(p=j;p<i+j;p++){//??
				x++;
				result[x]=str[p];
			}
			sum=0;
			for(p=0;p<x+1;p++){
				if(result[p]!=result[x-p])
					break;
				else sum++;
			}
			if(sum==x+1&&strlen(result)!=1)
				printf("%s\n",result);
		}
	}
	return 0;
}


int main()
{
	char str[501];
	int i, j;
	cin >> str;
	for (j = 1; str[j] != '\0'; j++)
	{
		for (i = 0; str[i] != '\0'; i++)
		{
			for (int l = j, p = 0; l >= 1; p++, l--)
			{
				if (str[i + p] != str[i + l])
				{
					break;
				}
				if (l <= 2)
				{
					for (int k = i; k <= i + j; k++)
					{
						cout << str[k];
					}
					cout << endl;
					break;
				}
			}
		}
	}
	return 0;
}


int main()
{
    char in[501];
    char zi[501];
    cin.getline(in,500,'\n');
    int L,judge=1;
    L=strlen(in);
    for(int i=2;i<=L;i++)
      for(int j=0;j<=L-i;j++)
         {
            memset(zi,0,sizeof(zi));
            for(int k=j;k-j<i;k++)
                zi[k-j]=in[k];
            judge=1;
            for(int k=0;k<i/2;k++)
                if(zi[k]!=zi[i-k-1])  {judge=0; break;}
            if(judge==1)  cout<<zi<<endl;
         }
    return 0;
}


/**
 * ??????
 * ???1000012844
 * ???????
 **/

void checkSymmetry( char *, int, int );

int main()
{
	int start, lenth;
	char str[ 501 ];

	cin >> str;

	for ( lenth = 2; lenth <= strlen( str ); lenth++ )
	{
		for ( start = 0; start < strlen( str ) - lenth + 1; start++ )
		{
			checkSymmetry( str, start, start + lenth - 1 );
		}
	}

	return 0;
}

void checkSymmetry( char str[], int start, int end )
{
	int i;
	for ( i = 0; i <= ( end - start ) / 2; i++ )
	{
		if ( str[ start + i ] != str[ end - i ] )
		{
			break;
		}
	}
	if ( i > ( end - start ) / 2 )
	{
		for ( i = start; i <= end; i++ )
		{
			cout << str[ i ];
		}
	cout << endl;
	}
}


int main()
{
	char str[501];
	int i , j , k ;
	int lenth , l , flag;
	l = 2; flag = 1;
	gets(str);
	lenth = strlen(str);
	for(l = 2 ; l <= lenth - 1 ; l++)
		for(i = 0 ; i <=  lenth - l ; i ++)
		{
			if(str[i] == str[i + l - 1])
			{
				for(j = i,k = i + l - 1; j < k ; j ++, k--)
				{
					if(str[j] != str[k])
					{
						flag = 0;
						break;
					}
				}
				if(flag == 1)
				{
					for(j = i ; j <= i + l - 1; j ++)
					printf("%c",str[j]);
					printf("\n");
				}
				flag = 1;
			}
		}
	return 0;
}


int main(){
	int len,len2,start,end,judge,i,p;
	char input[500],sample[500];
	gets(input);
	len=strlen(input);
	for(len2=2;len2<=len;len2++){
		for(start=0;start<=len-len2;start++){
			judge=1;
			end=start+len2-1;
			for(i=start;i<=end;i++){if(input[i]!=input[end+start-i]){judge=0;}}
			if(judge==1){
				for(i=start;i<=end;i++){printf("%c",input[i]);}
				printf("\n");
			}}}
return 0;
}


int son(char *a,int n)
{
	int i;
	for(i=0;i<n/2;i++)
	{
	  if(a[i]!=a[n-i-1])return 0;
	}
	for(i=0;i<n-1;i++)cout<<a[i];
	cout<<a[n-1]<<endl;
	return 0;
}
int main()
{
	char a[500];
	cin>>a;
	int n;
	n=strlen(a);
	for(int i=2;i<=n;i++)
	{
	 for(int j=0;j<n-i+1;j++)
	 {
		 son(&a[j],i);
	 }
	}
	return 0;
}


int main()
{
	char word[SIZE];
	int i,j,k,count,length;
	gets(word);
	length=strlen(word);
	for(i=2;i<=length;i++)
	{
		for(j=0;j<length-i+1;j++)
		{
			count=0;
			for(k=0;k<i;k++)
			{
				if(word[j+k]==word[j+i-1-k])
				{
					count++;
				}
			}
			if(count==i)
			{
				for(k=0;k<i;k++)
				{
					printf("%c",word[j+k]);
				}
				printf("\n");
			}
		}
	}
	return 0;
}


int main()
{
	char str[501];
	int l;
	int cnt;

	cin >> str;
	l = strlen(str);
	for (int i = 2; i <= l; i++)
		for (int j = 0; j <= l - i; j++)
		{
			cnt = 0;
			for (int k = 0; k <= i - 1; k++)
				if (str[j + k] == str[j + i - 1 - k])
					cnt++;
			if (cnt == i)
			{
				for (int k = j; k <= j + i - 2; k++)
					cout << str[k];
				cout << str[j + i - 1] << endl;
			}
		}
	return 0;
}


reverse(char s[],int j)
{
	int len;
	int reverse=1;
	int i;
	len=strlen(s);
	for(i=0;i<=j-i-1;i++)
		if(s[i]!=s[j-i-1])
		{reverse=0;break;}
	return(reverse);
}

main()
{
	char s[505],temp[505]={0};
	int i,j,k;
	int len;

	gets(s);
	len=strlen(s);
	for(i=2;i<=len;i++)
		for(j=0;j<=len-i;j++){
			for(k=0;k<i;k++)
				temp[k]=s[j+k];
			if(reverse(temp,i)==1) printf("%s\n",temp);
		}

}


int check(char a[], int point, int lenth)
{
	if(point > 0 && a[point - 1] == a[point + lenth])
		return 1;
	else return 0;
}
int main()
{
	char code[500];
	int flag[500];
	int i, j, lenth, outlet;
	for(i = 0; i < 500; i++)
		flag[i] = 1;
	cin >> code;
	for(outlet = 0, lenth = 0; outlet < strlen(code); lenth += 2)
	{
		for(i = 0; i < strlen(code); i++)
		{
			if(flag[i])
			{
				if(check(code, i, lenth))
				{
					for(j = i - 1; j <= i + lenth; j++)
					{
						cout << code[j];
						flag[i - 1] = 1;
					}
					cout << endl;
				}
				else  outlet++;
					flag[i] = 0;
			}
		}
	}
	return 0;
}


int judge(char ch[500])
{
	int len=strlen(ch);
	for(int i=0;i<=len/2;i++)
	{
		if(ch[i]!=ch[len-1-i])
			return 0;
	}
	return 1;
}
int main()
{
	char a[500]={'\0'},b[500]={'\0'};
	cin>>a;
	int j,k,len,i;

	len=strlen(a);
	//cout<<len<<endl;
	for(i=2;i<=len;i++){
		j=0;
		while(j<=len-i)
		{
			for(k=0;k<i;k++)
			{
				b[k]=a[j+k];
			}

			if(judge(b))
				cout<<b<<endl;
			j++;
		}
	}
	return 0;
}


char *reverse(char *pt);
int main()
{
	char source[501];
	char sub[501];
	char term[501];
	int len;
	int sublen;
	char *p=source;
	gets(source);
	len=strlen(source);
	for(sublen=2;sublen<=len;sublen++)
	{
		for(p=source;p<source+len-sublen+1;p++)
		{
			strncpy(sub,p,sublen);
			*(sub+sublen)='\0';
			strcpy(term,sub);
			if(strcmp(sub,reverse(term))==0)
				printf("%s\n", sub);
		}
	}
	return 0;
}
char *reverse(char *pt)
{
	char term[501];
	int i;
	strcpy(term,pt);
	for(i=0;i<strlen(pt);i++)
		*(pt+i)=*(term+strlen(pt)-i-1);
	return pt;
}


/*
 * huiwenxulie.cpp
 *
 *  Created on: 2011-12-21
 *      Author: Administrator
 */
int main()
{
	char p[501];
	cin.getline(p,501);
	int n=strlen(p);
	for(int k=2;k<=n;k++)
	{int i=0;
	int j;
		for(;i<=n-k;i++)
		{
			j=i+k-1;
			int c=i,d=j;
			while(i<j)
			{
				if(p[i]==p[j])
				{
					i++;j--;
				}
				else{break;}
				if(i>=j)
				{
					for(int s=c;s<=d;s++)
					{
						cout<<p[s];
					}
					cout<<endl;
				}

			}i=c;
		}
	}
	return 0;
}


void reverse(int n,char *p1,char *p2)
{
     int i;
     for (i=0;i<=n-1;i++)
         *(p2+i)=*(p1+n-i-1);
         *(p2+n)='\0';
}

void recopy(int n,char *p1,char *p2)
{
     int i;
     for (i=0;i<=n-1;i++)
         *(p2+i)=*(p1+i);
         *(p2+n)='\0';
}

void process(char *p)
{
     int i,j;
     char b[strlen(p)+1],c[strlen(p)+1];
     for (i=2;i<=strlen(p);i++)
     {
         for (j=1;j<=strlen(p)-i+1;j++)
         {
         reverse(i,p+j-1,b);
         recopy(i,p+j-1,c);
         if (strcmp(b,c)==0)
         printf("%s\n",c);
         }
     }
}

int main(int argc, char *argv[])
{
  char a[500];
  scanf("%s",a);
  char *p;
  p=a;
  process(p);
  return 0;
}


int main()
{   char a[500]={0};
    char b;
    int i=0;
    while(1)
      {  b=cin.get();
         if(b=='\n')  break;
         else
         {  a[i]=b;
            i=i+1;
         }
      }
    int j;
    int k;
    int l;
    int m;
    int u;
    for(j=2;j<=i;j++)
        {   for(k=0;k<i-j+1;k++)
               { m=0;
                 for(l=k;l<k+j;l++)
                      {  if(a[l]!=a[2*k+j-1-l])   m=1;
                      }
                 if(m==0)
                   {  for(u=k;u<k+j;u++)   cout<<a[u];
                      cout<<endl;
                   }

               }
        }
    return 0;
}


/*
 * hwzc.cpp
 *
 *  Created on: 2011-12-30
 *      Author: miaomiao
 */
int main()
{
	char string[501];
	cin>>string;
	int length=strlen(string);
	int i,j;
	int k=1;
	while(k<length)
	{
		for(i=0,j=k;j<length;i++,j++)
		{
			int begin=i,end=j;
			while(begin<end)
			{
				if(string[begin]!=string[end])
					break;
				if(string[begin]==string[end])
				{
					begin++;
					end--;
				}
			}
			if(begin>=end)
			{
				int print=i;
				for(print;print<=j;print++)
					cout<<string[print];
				cout<<endl;
			}
		}
		k++;
	}
	return 0;
}


int main()
{
	char str[600];
	cin>>str;
	int i,j,k,l;
	int n=strlen(str);
	for(i=2;i<=n;i++)
	{
		for(j=0;j<=n-i;j++)
		{
			int flag=1;
			for(k=j,l=k+i-1;k<=(j+(i-1)/2);k++,l--)
			{
				if(str[k]!=str[l])
				{
					flag=0;
					break;
				}
			}
			if(flag==1)
			{
				for(k=j;k<j+i;k++)
				{
					cout<<str[k];
				}
				cout<<endl;
			}
		}
	}
	return 0;
}


int judge(char *p)
{
   int l = strlen(p);
   char te[l];
   int i,j;
   for(i=0;i<l;i++)
     te[l-i-1]=p[i];
   te[l]='\0';
   /*strcpy(p,te);*/
   if(strcmp(p,te)==0)
     return 1;
   else
      return 0;

}

main()
{  int i,k,j,t,l,m,h,g,n;
   char p[510];
   gets(p);

   h=strlen(p);
  /* printf("%d",judge(p));*/
   char temp[h];
   for(l=2;l<=h;l++)
   {
      for(j=0;j<h-l+1;j++)
         {  t=j;
            for(g=0;g<l;g++)
            {
               temp[g]=p[t];
               t++;
            }
            temp[g]='\0';
            if(judge(temp)==1) printf("%s\n",temp);
         }
   }

}


void main()
{
int l,n,i,j,k;
char c[1000];
gets(c);
l=strlen(c);
	 for(i=1;i<=l-1;i++)
	  for(j=0;j<l-1;j++)
	  for(n=0;n<=i/2;n++)
	{
	  if(c[j+n]!=c[j+i-n])break;
	  else if(c[j+n]==c[j+i-n] && n<i/2)continue;
	  else
	  {for(k=j;k<j+i;k++)printf("%c",c[k]);printf("%c\n",c[j+i]);}
	}
}


int main()
{
	int i,j,k,len;
	char x[510],temp[510],tran[510];
	char *p=x;
	scanf("%s",x);
	len=strlen(x);
	for(i=2;i<=len;i++)
		for(j=0;j<=len-i;j++)
		{
			for(k=0;k<i;k++)
			{
				temp[k]=x[j+k];
	            temp[i]='\0';
			}
            for(k=0;k<i;k++)
				tran[i-k-1]=temp[k];
			tran[i]='\0';
			if(strcmp(temp,tran)==0)
				printf("%s\n",temp);

		}
	return 0;
}


void same(int i, char x[])
{
	int j, k;
    int flag = 1;
	for(j = 0; x[j] != '\0'; j++)
	{
		flag = 1;
		for(k = 0; k <  + i / 2; k ++)
		{
			if(x[k + j] != x[j + i - 1 - k])
			{
				flag = 0;
				break;
			}
		}
		if(flag)
		{
			for(k = j; k < j + i; k ++)
				cout << x[k];
			cout << endl;
		}

	}
}
int main()
{
	char x[501];
	int i, len;
	cin >> x;
	len = strlen(x);

	for(i = 2; i <= len; i++)
	{
		same(i, x);
	}
	return 0;
}


int main()
{
char str[501];
int a,c,i,j,m,n,temp;
gets(str);
c=strlen(str);
for (i=1;i<=c;i++){
        for (j=0;j<c-i;j++)
        {
			temp=0;m=j;n=j+i;
	        while (m<n){
		                    if (str[m]==str[n]){m++;n--;}
		                    else {temp=0;break;}
							temp=1;
			}
	        if (temp==1){
		       for(a=j;a<=i+j;a++)printf("%c",str[a]);
			   printf("\n");
			}
		}
}
return 0;
}


void fanxu(char *p,int len);
int compare(char *p1,char* p2,int length);
int main()
{
	char char_array[500],store1[500],store2[500],*p;
	gets(char_array);
    p=char_array;
	int len,i,j,k;
	len=strlen(char_array);
	for(k=0;k<=499;k++)
	{
		store1[k]='\0';
		store2[k]='\0';
	}
	for (i=2;i<=len;i++)
	{
		for(p=char_array;p<=char_array+len-i;p++)
		{
			for(k=0;k<=i-1;k++)
			{
				store1[k]=*(p+k);
				store2[k]=store1[k];
			}
			fanxu(store1,i);
			//printf("str1=");
			//puts(store1);
			//printf("str2=");
			///puts(store2);
			if (compare(store1,store2,i)==1)
			{
				puts(store2);
			}
		}
	}
}
void fanxu(char *p,int len)
{
	char *l,*m,c;
	for (l=p,m=p+len-1;l<m;l++,m--)
	{
		c=*m;
		*m=*l;
		*l=c;
	}
}
int compare(char *p1,char* p2,int length)
{
	int w;
	int exist=1;
	for (w=0;w<=length-1;w++)
	{
		if (*(p1+w)!=*(p2+w))
		{
			exist=0;
		}
	}
	return exist;
}