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

// myStrlen関数
int myStrlen(char s[]) {
    int i = 0;
    while (s[i] != '\0') {
        i++;
    }
    return i;
}

// 回文を作成する関数
char *setPalindrome(char s[]) {
    int m = myStrlen(s);
    int i, j;

    // 回文を作るために、最大で何文字一致するかを探す
    for (i = 0; i < m; i++) {
        // 前半部分 s[0:i] と後半部分 s[m-i:m] が一致するかを確認
        int match = 1;
        for (j = 0; j < m - i; j++) {
            if (s[j] != s[m - 1 - j]) {
                match = 0;
                break;
            }
        }

        // 完全に一致した場合
        if (match) {
            break;
        }
    }

    // 必要なメモリを確保
    char *tmp = (char *)malloc(sizeof(char) * (2 * m - i + 1));
    if (tmp == NULL) {
        printf("ERROR\n");
        return NULL;
    }

    // 回文の前半部分をそのままコピー
    for (j = 0; j < m - i; j++) {
        tmp[j] = s[j];
    }

    // 逆順で残りの部分を追加
    for (j = 0; j < i; j++) {
        tmp[m - i + j] = s[m - 1 - j];
    }

    tmp[2 * m - i] = '\0';  // 終端文字を追加

    return tmp;
}

// メイン関数
int main() {
    char nyuryoku[1024];  // 入力用バッファ
    char *kaibun;  // 回文を受け取るポインタ
    scanf("%s", nyuryoku);  // 入力を受け取る

    kaibun = setPalindrome(nyuryoku);  // 回文を生成
    if (kaibun != NULL) {
        printf("%s\n  -> %s\n", nyuryoku, kaibun);
        free(kaibun);  // 動的に確保したメモリを解放
    }

    return 0;
}
