semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int main()
{
	char a[500];
	int i,j,n,length;
	gets(a);
	length=strlen(a);
	for(i=0;i<length;i++)
	{
		if(a[i]==a[i+1])
		{
			for(j=i;j<i+1;j++)
				printf("%c",a[j]);
			printf("%c\n",a[j]);
		}
	}
	for(n=1;n<length;n++)
	{
		for(i=0;i<length-n-1;i++)
		{
			if(a[i+1]==a[i])
			{
				if(a[i+n+1]==a[i-n])
				{
					if(a[i+n]==a[i-n+1])
					{
						for(j=i-n;j<i+n+1;j++)
							printf("%c",a[j]);
						printf("%c\n",a[j]);
					}
				}
			}
		}
	}
	return 0;
}
//*******************************************************
//*11.11??  ????                                  *
//*?????  ?? 1100012844                          *
//*???2011?11?11?                                 *
//*******************************************************
void huiwen(char a[]) // ???huiwei??
{
	int i, j, n, sum; // n????????
	for (n = 2; n <= strlen(a); n++) // n???2
	{

		// j????n????????????
		for (j = 0; j <= strlen(a) - n; j++)
		{
			sum = n + 2 * j - 1; // ??????????
			for (i = j; i <= j + n / 2; i++) // ???????
			{
				if (a[i] != a[sum - i]) // ??????
					break;
			}

			// ???????????????n???????
			if (i == j + n / 2 + 1)
			{

				// ?????????
				for (i = j; i <= n + j - 1; i++)
					cout << a[i];
				cout << endl;
			}
		}
	}
}
int main()
{
	char str[501];
	cin >> str;
	huiwen(str); // ????
	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 main()
{
char a[520],b[520];
int p,q,x;
gets(a);
int n=strlen(a);
for (int l=1;l<=n;l++)
   for (int i=0;i+l<n;i++)
      {
      x=0;
      p=i;
      q=l+i;
      for(;p<q;p++,q--)
         if (a[p]!=a[q]) x=1;
      if (x==0)
         {
         for (int k=i;k<=i+l;k++)
         printf("%c",a[k]);
         printf("\n");
         }
      }
}
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 main()
{
	char a[520];
	int i,j,k,l,p,n;
	cin >> a ;
	n=strlen(a);
	for(j=1;j<n;j++)
	{
		for(i=0;i<n;i++)
		{
			k=j;p=i;
			if (a[p]==a[p+k] && k==1) {cout << a[p] << a[p+1] << endl;}
			if (a[p]==a[p+k] && k>1)
			{
		    	while(a[p]==a[p+k]&&k>1)
			   {
			    	p++;k=k-2;
		    	}
		    	if(k<2&&a[p]==a[p+k])
		    	{
			    	for(l=i;l<=i+j;l++)
					{
						cout << a[l] ;
					}
					cout <<endl;
		    	}
			}
		}
	}
	return 0;
}
/*
 * duobianxingyouxi3.cpp
 *
 *  Created on: 2012-12-6
 *      Author: w
 */
int main(){
	char a[500];//?????
	cin >> a;
	int len=0;
	len = strlen(a);//???????
	int i=0,j=0,k=0,x=0;
	for(i=2;i<=len;i++){//?????
		for(j=0;j<len;j++){//???????
			x=0;//???
			if(i%2==0){//???????
				for(k=j;k<=j+(i/2)-1;k++){//????????
					if(a[k]!=a[2*j+i-1-k]){//???????????
						x=1;
					    break;}
					}
			}
			else{//??????
				for(k=j;k<=j+((i-1)/2)-1;k++){
					if(a[k]!=a[2*j+i-1-k]){
						x=1;
						break;
					}
				}
			}
			if(x==0){
				for(k=j;k<=j+i-1;k++){//???????
					cout << a[k];
				}
				cout << endl;
			}
		}
	}
	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;
}
int main()
{
	char a[501];
	int i, num = 0, j, z, m;
	cin >> a;
	for (i = 0; a[i] != '\0'; i++)
		num++;
	for (i = 2; i <= num; i++)
	{
		for (j = 0; j <= num - i + 1; j++)
		{
			if (i % 2 == 0)
			{
				for (z = j; z <= j + i / 2 - 1; z++)
				{
					m = j + i - 1 - z + j;
					if (a[z] != a[m])
						break;
				}
				if (z == j + i / 2)
				{
					for (z = j; z <= j + i - 1; z++)
						cout << a[z];
					cout << endl;			
				}
			}
			if (i % 2 == 1)
			{
				for (z = j; z <= j + (i - 1)/ 2 - 1; z++)
				{
					m = j + i - 1 - z + j;
					if (a[z] != a[m])
						break;
				}
				if (z == j + (i - 1)/ 2)
				{
					for (z = j; z <= j + i - 1; z++)
						cout << a[z];
					cout << endl;
				}
			}
		}
	}
	return 0;
}
//**********************************
//*????.cpp                    *
//*??????                    *
//*???2011-10-30                *
//**********************************


void checking (char check[], int i) 
{
	int m, q;
	for (m = 0; m < i; m++)
	{
		if (check[m] != check[i - 1 - m])        //??check???????break???
			break;
	}
	if (m == i)
	{
		for (q = 0; q < i; q++)
		{
			cout << check[q];                    //????break???????????????????
		}
		cout << endl;
	}
}
int main()
{
	int i, j, k, m, n, flag, q;
	char str[501];
	char check[501];                                     //???????????????
	cin >> str;
	n = strlen(str);                                     //????????
	for (i = 2; i <= n; i++)
	{
		flag = 0;
		for (j = 0; j < n - i + 1; j ++)
		{
			for (k  = j; k < j + i; k ++)
			{
				check[k - j] = str[k];                   //??????????check??
			}
			checking (check, i);
		}
	}
	return 0;
}
int main()
{
  char s[500];
  gets(s);
  int i,j,k,l=0,m=0;
  for(i=2;i<strlen(s);i++) 
  for(j=i/2;j<=(strlen(s)-i/2);j++)
  {  l=0;
     if(i%2==0)
     {
        for(k=0;k<i/2;k++)
        if(s[j-k-1]!=s[j+k])
        { l=1;break;}
        else continue;
      }      
       if(i%2==1)
      {   if(j==strlen(s)-i/2)
          break;
          for(k=1;k<(i/2+1);k++)
          if(s[j-k]!=s[j+k]) 
             {l=1;break;}
       }
      if(l==0)
      {for(m=0;m<i-1;m++)
       printf("%c",s[j-i/2+m]);
       printf("%c\n",s[j+i/2-1]);
       } 
     }
 return 0;
}
void main()
{
	char s[500];
	unsigned int i,j,flag=0;
	char *p;
	scanf("%s",s);
	for(i=2;i<=strlen(s);i++)
	{
		for(p=s;*(p+i-1)!='\0';p++)
		{
			flag=0;
			for(j=0;j<i/2;j++)
			{
				if(*(p+j)!=*(p+i-1-j))
					flag=1;
			}
			if(flag==0)
			{
				for(j=0;j<i;j++)
					putchar(*(p+j));
				printf("\n");
			}
		}
	}
}
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 main()
{
	char a[500];
	int i,j,k,x;
	gets(a);
	//i?????????
	for(i=2;i<=strlen(a);i++)
	{
		//j?????????
		for(j=0;j<=(strlen(a)-i);j++)
		{
			x=0;
			for(k=0;k<i;k++)
			{
				if(a[j+k]!=a[j+i-1-k])
				{
					x=1;
					break;
				}
			}
			if(x==0)
			{
				for(k=j;k<j+i;k++)
					printf("%c",a[k]);
			}
			printf("\n");
		}
	}
	return 0;
}
/*
 * 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;
}
int main()
{
	int i=0,x[510],y[510],e,f,count=0;
	char a[510],b;
	while (b!='\n')
	{
		cin.get(b);
		a[i++]=b;
	}//a????0?i-2?
	int j1,j2,j3;
	for (j1=2;j1<=i-1;j1++)//??
	{
		for (j2=0;j2<=i-3;j2++)
		{
			for (j3=0;j3<=j1-1;j3++)//?????????????
			{
				if (j2+j3<=i-2)
				e=a[j2+j3];
				f=a[j2+j1-1-j3];
				if (e==f)
					count++;
				if (count==j1)
				{
					for (int j4=j2;j4<=j2+j1-1;j4++)
						cout<<a[j4];
					cout<<'\n';
				}
			}
			count=0;
		}
	}
	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;
}
void hw(char a[],int n)
{
	int i,j,k,h=0;
	for(i=2;i<=n;i++)
	{
		for(j=0;j<=n-i;j++)
		{
			for(k=0;k<i;k++)
			{
				if(a[j+k]==a[j+i-k-1])
				{
					h=1;
				}
				else
				{
					h=0;
					break;
				}
			}
			if(h==1)
			{
				for(h=j;h<j+i;h++)
				printf("%c",a[h]);
				printf("\n");
				h=0;
			}
		}
	}
}
int main()
{
	int n;
	char a[500];
	scanf("%s",a);
	n=strlen(a);
	hw(a,n);
	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);
         }
   }
   
   
}
//* * * * * * * * * * * * * * * * * * * * * * * * 
//*????????                             *
//*????????.cpp                         *
//*?????  1000012839                       *
//*???2010.11.25                             *
//* * * * * * * * * * * * * * * * * * * * * * * * 


int main()
{
	char a[500];	//	???????
	int len[5000], x[5000], y[5000];	//	????len??????????????x,y?????????????????
	int i, j, k, l, m, n, flag, count = 0;	//	????i, j, k, m, n,?????l???flag???????count?

	cin >> a;	
	l = strlen(a);	//	?????	
	for (i = 0; i < l; i++)
	{
		for (j = l - 1; j > i; j--)
		{
			m = i;
			n = j;
			if (a[m] == a[n])	//	?????????????????
			{
				flag = 1;	
				while (n >= m)
				{
					if (a[n--] != a[m++])
					{
						flag = 0;
						break;	//	??????flag??0????
					}
				}
				if (flag)	//	flag?1????????
				{
					len[count] = j - i + 1;	//	???????
					x[count] = i;
					y[count] = j;	//	???????
					count++;	//	???1?
				}
			}
		}
	}
	
	for (j = 2; j <= l; j++)
	{
		for (i = 0; i < count; i++)
		{
			if (len[i] == j)	//	j???????????????????	
			{
				for (k = x[i]; k <= y[i]; k++)
					cout << a[k];	//	???????
				cout << endl;	//	????????
			}
		}
	}

	return 0;
}
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;
}
//*******************************************//
//*???????                           *//
//*?????                               *//
//*???2010.12.21                         *//
//*******************************************//
void search();//???????
void check(char same[]);
char str[500];
int lenstr;
int main()
{
   cin>>str;
   lenstr=strlen(str);
   search();
}
void search()
{
  int i,j,len,t;
  for(len=2;len<=lenstr;len=len+2)//???????
  {
    for(i=0;i<=lenstr-len;i++)//??????
	{
	  char spr[500];
	  for(j=i,t=0;j<=i+len-1;j++,t++)//???????????????????????????????????????????
         spr[t]=str[j];
	  spr[j]='\0';
	  check(spr);
	}
  }
}
void check(char same[500])
{
	int lensame;
	lensame=strlen(same);
	int i,flag=1;
	for(i=0;i<=lensame/2-1;i++)//??????????????
	{
	  if(same[lensame-1-i]!=same[i])//??????????
	  {
	    flag=0;
		break;
	  }
	}
	if(flag==1)
	{
	  for(i=0;same[i]!='\0';i++)
		  cout<<same[i];
	  cout<<endl;
	}
}
int main() {
	char a[501] = "0";//??????
	int r, i, j, k, m;
	cin >> a;
	for (i = 0; a[i]; i++) {
	}
	r = i;
	for (i = 2; i <= r; i++) {
		if (i % 2 == 0) {
			for (j = i / 2 - 1; j <= r - i / 2; j++) {
				for (k = 1; k <= i / 2; k++) {
					if (a[j - k + 1] != a[j + k])//???????
					{
						break;
					} else
						continue;
				}
				if (k == i / 2 + 1) {
					for (m = -i / 2 + 1; m <= i / 2; m++)
						cout << a[j + m];
					cout << endl;
				}
			}
		}//??????
		if (i % 2 == 1) {
			for (j = i / 2; j < r - i / 2; j++) {
				for (k = 1; k <= i / 2; k++) {
					if (a[j - k] != a[j + k]) {
						break;
					} else
						continue;
				}
				if (k == i / 2 + 1) {
					for (m = -i / 2; m <= i / 2; m++)
						cout << a[j + m];
					cout << endl;
				}//??????
			}
		}
	}
	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 main()
{
	int i,j,k,p,q,l,m,n;
	char a[500];
     gets(a);
	l=strlen(a);
	for(k=0;k<l-1;k++)
	{
		if(a[k]==a[k+1])
			printf("%c%c\n",a[k],a[k+1]);
	}
	  for(i=2;i<l;i++)
	  {
		  for(k=0;k<l;k++)
		  {
	        	p=k;q=i+k;
		    m=p;n=q;
		    while(a[p]==a[q]&&p<=q)
			{
		    	p++;
			   q--;
			}
		       if(q-p<1)
			   {
			       for(j=m;j<n;j++)
			       printf("%c",a[j]);
			       printf("%c\n",a[n]);
			   }
		  }
	  }
	
}
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;
}
//****************************************************** 
//* ? ? ?   ?? ? ? ?                           *
//* ? ?      ?? ? ?                              *
//* ? ? ? ??2010 ? 11 ? 24 ?                   * 
//* ? ?      ?1000010185                            *
//****************************************************** 
char a[501]; //??a??????
int Judge(int b, int e) //????Judge??a????b???e???????
{
	int k = (b + e - 1) / 2;
	int i;
	for (i = b; i <= k; i ++)
		if (a[i] != a[b + e - i])
			break;
	if (i == k + 1)
		return 1;
	else
		return 0;
}

int main()
{
	int l;
	cin >> a;
	l = strlen(a);
	for (int i = 2; i <= l; i ++) //?????2?l??
		for (int j = 0; j <= l - i; j ++) //?????????????
			if(Judge(j, j + i - 1))
			{
				for (int k = j; k < i + j; k ++)
					cout << a[k];
				cout << endl;
			}
	return 0;
}
char str[500], huiwen[500];
void main()
{	
	int i, j, m, leng;
	int f(int, int);
	scanf("%s",str);
	for(leng=2; leng<strlen(str); leng++)
	{
		for(i=0; i<strlen(str); i++)
		{
			if(f(i, i+leng-1)==1) printf("%s\n",huiwen);
		}
	}
	/*for(i=0; i<strlen(str); i++)
	{
		for(j=i+1; j<strlen(str); j++)
		{
			if (f(i, j)==1) printf("%s\n",huiwen);
			for(m=0; m<=500; m++) huiwen[m]='\0';
		}
	}*/
}
int f(int i, int j)
{
	int flag=0, k=0;
	char s1[500], s2[500];
	for(k=0; k<=j-i; k++)
	{
		s1[k]=str[i+k];
		s2[k]=str[j-k];
		if(s1[k]==s2[k]) flag=flag;
		else flag=flag+1;
	}
	if(flag==0) 
	{
		for(k=0; k<=j-i; k++)
		{
			huiwen[k]=s1[k];
		}
		return 1;
	}
	else return 0;
}
int find(char *a, int n)
{
	int i,j,t,k;
	for(i=0;a[i]!='\0';i++)
	{
		t=1;
		if(a[i]==a[i+n-1])
		{
			j=i+1;k=i+n-2;
			do
			{
				if(a[j]==a[k]){j++;k--;t++;}
				else break;
			}
			while(k>=j);
			if(t==n/2||t==n/2+1)
			{
				for(j=i;j<=i+n-1;j++) printf("%c",a[j]);
				printf("\n");
			}
		}
	}
}

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

}
int main()
{
	char a[500],*p1,*p2,*p3,*p4,*p5,*p6;
	int i,l,j,flag;
	gets(a);
	l=strlen(a);
	for(j=1;j<=l-1;j++)
	{
		p1=a;p2=&a[j];
		for(i=0;i<l-j;i++,p1++,p2++)
		{
			p5=p1;p3=p1;p6=p2;p4=p2;
			flag=0;
			for(;p3<=p4;p3++,p4--)
			{
				if(*p3!=*p4)flag++;
			}
			if(flag==0)
			{
				for(;p5<=p6;p5++)
				{
					printf("%c",*p5);
				}
				printf("\n");
			}
			
		}
	}
	return 0;
}
int main()
{
	char x[500]={"0"};
	int length,i,j,m,t,w;
	scanf("%s",x);
	length=strlen(x);
	for(i=2;i<=length;i++)
	{
		for(j=0;j+i-1<length;j++)
		{
			m=0;
		    for(t=0;t<i/2;t++)
			{
				if(x[j+t]!=x[i+j-1-t])
				m=1;
			}
			if(m==0)
			{
			    for(w=j;w<=i+j-1;w++)
				{
				    printf("%c",x[w]);
				}
			    printf("\n");
			}
		}
	}
    return 0;
}
void srev(char str[500], int len)
{
	char rev[500];
	int i;
	for (i=0; i<len; i++)
		*(rev+i)=*(str+len-i-1);
	for (i=0; i<len; i++)
		*(str+i)=*(rev+i);
}
int main ()
{
	char s[500], str[500], rev[500];
	gets(s);
	int len=strlen(s), i, j;
	for (i=2; i<len; i++) {
		for (j=0; j<len-i+1; j++) {
			strncpy(str, s+j, i);
			strncpy(rev, s+j, i);
			str[i]=rev[i]='\0';
			srev(rev, i);
			if (strcmp(str, rev)==0) {
				puts(str);
			}
		}
	}
	return 0;
}
void main()
{
    char str1[500]={0},str2[500]={0};
	int i,start,k,l,p=0,q,f,d;
	gets(str1);
	l=strlen(str1);
	for(i=2;i<=l;i++)//?????
	{
		for(start=0;start<l;start++)//????
		{
			d=start;
			f=0;
			p=0;

            for(k=start+i-1;k>=start;k--)//????
			{
				str2[p]=str1[k];
				p++;
			}
            for(q=0;q<p;q++)//??
			{	
				if(str2[q]==str1[d])
				{
					f=1;
					d++;
				}
				else
				{
					f=0;
					break;
				}
			}

			if(f==1)
			{
				puts(str2);
			}
		}

	}
}
int main()
{
	char a[500];
	int i,j,r=0,k,p,q,m,n;
    for(i=0;i<500;i++)
	{
		scanf("%c",&a[i]);
		r++;
		if(a[i]=='\n')
			break;
	}
	r=r-1;
    for(j=1;j<=r-1;j++)
		for(k=0;k<r;k++)
		{
			m=0;
			p=r;
			q=j;
			for(i=k;i<=k+j/2;i++)
			{
				if(a[i]==a[i+q])
				{
					q=q-2;
                    m++;
				}
				else
					break;
			}
			if(m==(j+1)/2)
			{
				for(n=k;n<=k+j;n++)
				     printf("%c",a[n]);
				printf("\n");
			}
		}
	return 0;
}
char s[510]; 
int num=0; 
int k=0; 
int len; 
struct Str{
	int start,end;
	int len; 
	}str[30010];  
void run(){
	int a=k;
	int b=num; 
	k=num; 
	int k1,k2; 
	for(int i=a;i<b;i++){
		k1= str[i].start-1; 
		k2= str[i].end+1; 
		if(k1>=0&&k2<len&&s[k1]==s[k2]){
			str[num].start=k1;
			str[num].end=k2;
			str[num++].len=k2-k1; 
			} 
		} 
	} 
int main(){ 
	cin>>s;
	len = strlen(s); 
	//??????? 
	for(int i=0;i<len-1;i++){
		if(s[i]==s[i+1]){ 
			str[num].start = i;
			str[num].end = i+1;
			str[num++].len = str[i].start-str[i].end;
			} 
		}
	k=0; 
	//????????????????????????? 
	while(k<num) run(); 
	for(int i=0;i<num;i++){
		for(int j=str[i].start;j<=str[i].end;j++){
			printf("%c",s[j]); 
			} 
		printf("\n"); 
		} 
	return 0;
	}
int main()
{
	char str[500];
	cin >> str;
	int len, i, j, k, flag, count,start, end;
	len = strlen(str);
	for (i = 2; i <= len - 1; i++)      // i???????????
	{
		for (j = 0; j <= len - i; j++)  // j???????????,len - i???????????
		{
			flag = 0;
			count = j;
			for (k = j + i - 1; k >= count; count++, k--)  // ?k = j?
			{
				flag = 0;
				if (str[count] == str[k])
				{
					flag = 1;      // ????????
				}
				else 
				{
					flag = 0;
					break;
				}
                // ??i??????????????i?????????k???count?count + 1
				if ((flag == 1) && ((k == count) || (k == count + 1))) 
				{
					for (start = j; start <= j + i - 1; start++)
					{
						cout << str[start];
						if (start == j + i - 1)
						{
							cout << endl;
						}  // end for
					}  // end for
				} // end if
			} // end for k
		} // end for j 
	} // end for i
	return 0;
}
int main()
{
	char a[501], b[501];
	char c;
	int i, l, j, k, m, q, n = 0, p;
	cin.getline(a, 501);
	l = strlen(a);
	for (i = 0; i < l; i++)
		b[l - 1 - i] = a[i];
	for (j = 2; j <= l; j++)
	{
		for (m = 0; m <= l - j; m++)
		{
			n = 0;
			p = m;
			q = l - p - j;
			for (k = 1; k <= j; k++)
			{
				if (a[p] == b[q])
				{
					p++;
					q++;
					n++;
				}
				else
					break;
			}
			if (n == j)
			{
				i = 0;
				while(i < n)
				{	
					cout << a[m + i];
					i++;
				}
				cout << endl;
			}				
				
		}
	}
	return 0;
}