#include <bits/stdc++.h>
using namespace std;
const long double PI = 3.141592653589793;
const long double E = 2.71828182845904523;
const long long LLINF = 9000000009000000099;
const long long INF = 2009000099;
const long long MOD7 = 1000000007;
const long long MOD9 = 1000000009;
template <class A, class B, class C>
struct triple {
  A first;
  B second;
  C third;
  triple(A, B, C);
  triple();
};
template <class A, class B, class C>
triple<A, B, C>::triple(A a, B b, C c) {
  first = a;
  second = b;
  third = c;
}
template <class A, class B, class C>
triple<A, B, C>::triple() {}
template <class A, class B, class C>
triple<A, B, C> make_triple(A a, B b, C c) {
  triple<A, B, C> t(a, b, c);
  return t;
}
template <class A, class B, class C>
bool operator<(triple<A, B, C> a, triple<A, B, C> b) {
  if (a.first != b.first) return a.first < b.first;
  if (a.second != b.second) return a.second < b.second;
  if (a.third != b.third) return a.third < b.third;
}
template <class T>
T inline sqr(T a) {
  return a * a;
}
long long pow(long long a, long long d, long long mod = LLINF) {
  if (d == 0) return 1;
  if (d == 1) return a;
  long long t = pow(a, d / 2, mod);
  t = (t * t) % mod;
  if (d & 1) t = (t * a) % mod;
  return t;
}
long long gcd(long long a, long long b) {
  while (a && b)
    if (a > b)
      a %= b;
    else
      b %= a;
  return a + b;
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
int main() {
  ios::sync_with_stdio(0);
  string n;
  cin >> n;
  string s = n;
  reverse(s.begin(), s.end());
  cout << n + s;
}
