#include <stdio.h>
#include <stdlib.h>

int myStrlen(char s[]) {
	int i;
	for (i = 0; s[i] != '\0'; i++);
	return i;
}

// 関数の中でtmpに対してmallocして
// そこに回文を代入してreturnで返しましょう
char* setPalindrome(char s[]) {
	char* tmp;

	//以下に必要な宣言を含めて書いてください
	int num = myStrlen(s);
	int j,k=1;
	tmp = (char*)malloc(sizeof(char) * num * 2);
	if(tmp==NULL){
		printf("ERROR");
		return 0;
	}
	for ( j = 0; j <= num - 1; j++) {
		tmp[j] = s[j];
	}
	for (j = num; j <= num * 2-1; j++ ) {
		tmp[j] = s[num - k];
		k++;
		if(tmp[num*2]=tmp[0]){
			tmp[num*2]='\0';
		}
	}
	return tmp;
}


//メイン関数はいじる必要はありません
int main() {
	int i;
	char nyuryoku[1024]; //入力
	char* kaibun;   //回文を受け取る
	scanf("%s", nyuryoku);
	kaibun = setPalindrome(nyuryoku);
	printf("%s\n  -> %s\n", nyuryoku, kaibun);
	free(kaibun);
	return 0;
}
