#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1005
#define NW 1
#define N 2
#define W 3
#define COMMON 4
int c[SIZE+1][SIZE+1];
int b[SIZE+1][SIZE+1];
int t[SIZE+1];
char input[SIZE+1];
char rev[SIZE+1];
int x[SIZE+1];
void makeCLS();
void traceCLS(int i,int j);
void makePalindrome();
int len;
int main()
{
while(scanf("%s",input)==1)
{
len = strlen(input);
memset(t,0,sizeof(int)*(len));
memset(x,0,sizeof(int)*(len));
makeCLS();
printf("%d ", len - c[len][len]);
traceCLS(len,len);
makePalindrome();
}
return 0;
}
void makeCLS()
{
int u,v,i,j;
for(u=len-1,v=0; u >=0; u--,v++){
rev[u] = input[v];
}
for( i = 1 ; i <= len ; i ++){
c[i][0] = 0;
c[0][i] = 0;
}
for(i = 1; i <= len ; i++){
for(j = 1; j <= len ; j++){
if(input[i-1] == rev[j-1]){
b[i][j] = NW;
c[i][j] = c[i-1][j-1] + 1;
}
else if(c[i-1][j] > c[i][j-1]){
c[i][j] = c[i-1][j];
b[i][j] = N;
}
else{
c[i][j] = c[i][j-1];
b[i][j] = W;
}
}
}
}
void makePalindrome()
{
int i=0,j=0;
while(i < len || j < len ){
--정방향 문자 출력 --
while(t[i] != COMMON && i < len){
printf("%c",input[i]);
i++;
}
--역방향 문자 출력 --
while(x[j] != COMMON && j < len){
printf("%c",rev[j]);
j++;
}
-- LCS 출력 --
printf("%c",input[i]);
i++; j++;
}
putchar('\n');
}
void traceCLS(int i,int j)
{
int u=0,v=0;
if(i==0 || j==0)
{
return ;
}
if(b[i][j] == NW){
-- 정방향 문자열에서 LCS 원소 체크 --
t[i-1] = COMMON;
-- 역방향 문자열에서 LCS 원소 체크 --
x[j-1] = COMMON;
traceCLS(i-1,j-1);
}
else if(b[i][j] == N){
traceCLS(i-1,j);
}
else{
traceCLS(i,j-1);
}
}