from collections import deque class RollingHash: def __init__(self, s: str): self.MOD = 998244353 self.B = 1009 self.h = 0 self.deq = deque() for c in s: self.append(c) def append(self, c: str): assert len(c) == 1 self.deq.append(ord(c)) self.h = self.h * self.B + ord(c) self.h %= self.MOD def appendleft(self, c: str): assert len(c) == 1 sz = len(self.deq) self.deq.appendleft(ord(c)) self.h += ord(c) * pow(self.B, sz, self.MOD) self.h %= self.MOD def pop(self): assert len(self.deq) > 0 inv_b = pow(self.B, self.MOD-2, self.MOD) v = self.deq.pop() self.h = (self.h - v) * inv_b % self.MOD def popleft(self): assert len(self.deq) > 0 sz = len(self.deq) v = self.deq.popleft() self.h -= v * pow(self.B, sz-1, self.MOD) self.h %= self.MOD def hash(self) -> int: return self.h S = input() h = RollingHash(S) r_h = RollingHash(S[::-1]) for i in range(len(S)): if h.hash() == r_h.hash(): t = S[:i] ans = S + t[::-1] print(ans) break h.popleft() r_h.pop()