#include<bits/stdc++.h>
using namespace std;
char s1[1000005], s2[1000005], s3[1000005];
int Next[1000005], cnt, len1, len2, len3, n, ss[1000005], st[1000005], top;
void getNext(char *p, int plen) {
Next[0] = 0, Next[1] = 0;
for(int i = 1;i <= plen;i ++) {
int j = Next[i];
while(j && p[i] != p[j]) {
j = Next[j];
}
if(p[i] == p[j]) {
Next[i + 1] = j + 1;
}
else Next[i + 1] = 0;
}
}
void kmp(char *s, char *p) {
int last = -1;
int slen = strlen(s), plen = strlen(p);
getNext(p, plen);
int j = 0;
for(int i = 0;i < plen;i ++) {
while(j && p[i] != s[j]) {
j = Next[j];
}
if(p[i] == s[j]) j ++;
ss[i] = j;
st[++ top] = i;
if(j >= slen) {
top -= slen;
j = ss[st[top]];
last = i;
}
}
}
signed main() {
cin >> s1;
len1 = strlen(s1);
if(len1 == 1) {
cout << s1;
return 0;
}
if(len1 == 2) {
if(s1[0] == s1[1]) {
cout << s1;
}
else {
cout << s1[0] << s1[1] << s1[0];
}
return 0;
}
for(int i = len1;i >= 1;i --) {
s2[len1 + i - 1] = s1[len1 - i];
}
for(int i = 0;i < len1;i ++) {
s2[i] = s1[i];
}
len2 = len1 + len1;
while(s2[len2 - 1 - 1] == s2[len2 - 1]) len2 --;
getNext(s2, len2);
int border = len2 - Next[len2 - 1] - len1 - 2;
cout << s1;
for(int i = border;i < len1;i ++) {
cout << s2[len1 + i];
}
}