#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define MAX 100005
int z[MAX];
string str,re;
void Zfun()
{
memset(z,0,sizeof(z));
reverse(re.begin(),re.end());
int len=str.length();
int l=0,r=0;
for(int i=0;i<=len-1;i++)
{
if(i<=r){
z[i]=min(r-i+1,z[i-l]);
}
while(i+z[i]<len and re[z[i]]==str[i+z[i]]){
++z[i];
}
if(i+z[i]-1>r){
l=i,r=i+z[i]-1;
}
}
}
char temp[MAX];
int main()
{
int t,pos;
while(scanf("%s",temp) != EOF)
{
str=temp;
re=str;
Zfun();
int len=str.length();
for(int i=0;i<=len-1;i++)
{
if(i+z[i]==len)
{
pos=i-1;
break;
}
}
printf("%s",temp);
for(int i=pos;i>=0;--i)
{
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIE1BWCAxMDAwMDUKCmludCB6W01BWF07CnN0cmluZyBzdHIscmU7Cgp2b2lkIFpmdW4oKQp7CiAgICBtZW1zZXQoeiwwLHNpemVvZih6KSk7CiAgICByZXZlcnNlKHJlLmJlZ2luKCkscmUuZW5kKCkpOwogICAgaW50IGxlbj1zdHIubGVuZ3RoKCk7CiAgICBpbnQgbD0wLHI9MDsKICAgIGZvcihpbnQgaT0wO2k8PWxlbi0xO2krKykKICAgIHsKICAgICAgICBpZihpPD1yKXsKICAgICAgICAgICAgeltpXT1taW4oci1pKzEseltpLWxdKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUoaSt6W2ldPGxlbiBhbmQgcmVbeltpXV09PXN0cltpK3pbaV1dKXsKICAgICAgICAgICAgKyt6W2ldOwogICAgICAgIH0KICAgICAgICBpZihpK3pbaV0tMT5yKXsKICAgICAgICAgICAgbD1pLHI9aSt6W2ldLTE7CiAgICAgICAgfQogICAgfQp9CgpjaGFyIHRlbXBbTUFYXTsKCmludCBtYWluKCkKewogICAgaW50IHQscG9zOwogICAgd2hpbGUoc2NhbmYoIiVzIix0ZW1wKSAhPSBFT0YpCiAgICB7CiAgICAgICAgc3RyPXRlbXA7CiAgICAgICAgcmU9c3RyOwogICAgICAgIFpmdW4oKTsKICAgICAgICBpbnQgbGVuPXN0ci5sZW5ndGgoKTsKICAgICAgICBmb3IoaW50IGk9MDtpPD1sZW4tMTtpKyspCiAgICAgICAgewogICAgICAgICAgICBpZihpK3pbaV09PWxlbikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcG9zPWktMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByaW50ZigiJXMiLHRlbXApOwogICAgICAgIGZvcihpbnQgaT1wb3M7aT49MDstLWkpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIiVjIixzdHJbaV0pOwogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICB9CgoKICAgIHJldHVybiAwOwp9Cgo=