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

// 文字列の長さを返す関数
int myStrlen(char s[]) {
    int i;
    for (i = 0; s[i] != '\0'; i++);
    return i;
}

// 回文を作成する関数
char *setPalindrome(char s[]) {
    int len = myStrlen(s); // 入力文字列の長さを取得
    int totalLen = 2 * len; // 回文用のメモリサイズを計算
    char *tmp = (char *)malloc((totalLen + 1) * sizeof(char)); // メモリ確保

    if (tmp == NULL) {
        printf("Memory allocation failed\n");
        exit(1); // メモリ確保に失敗した場合にプログラム終了
    }

    // 入力文字列をコピー
    for (int i = 0; i < len; i++) {
        tmp[i] = s[i];
    }

    // 入力文字列を逆順に追加
    for (int i = 0; i < len; i++) {
        tmp[len + i] = s[len - 1 - i];
    }

    tmp[totalLen] = '\0'; // 終端文字を追加
    return tmp; // 回文を返す
}

int main() {
    char nyuryoku[1024]; // 入力
    char *kaibun;   // 回文を受け取る
    scanf("%s", nyuryoku);
    kaibun = setPalindrome(nyuryoku);
    printf("%s\n  -> %s\n", nyuryoku, kaibun);
    free(kaibun); // 動的確保したメモリを解放
    return 0;
}
