#include <bits/stdc++.h>
using namespace std;
template <typename T>
using V = vector<T>;
int gcdex(int a, int b, int &x, int &y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  int x1, y1;
  int g = gcdex(b % a, a, x1, y1);
  x = y1 - (b / a) * x1;
  y = x1;
  return g;
}
inline int ADD_MOD(int a, int b) { return (a + b) % 1000000007; }
inline int MUL_MOD(int a, int b) { return (int64_t(a) * b) % 1000000007; }
inline int SUB_MOD(int a, int b) { return a >= b ? a - b : a + 1000000007 - b; }
int DIV_MOD(int a, int b) {
  int x, y;
  gcdex(b, 1000000007, x, y);
  int b1 = (x % 1000000007 + 1000000007) % 1000000007;
  return MUL_MOD(a, b1);
}
const long double EPS = 1. / 1e9;
inline bool EPS_EQUAL(long double a, long double b) {
  return abs(a - b) <= EPS;
}
inline bool EPS_LESS(long double a, long double b) { return b - a > EPS; }
inline bool EPS_GREATER(long double a, long double b) { return a - b > EPS; }
const int INF = 1e9;
const int64_t INF64 = 2e18;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.precision(15);
  string s;
  cin >> s;
  int chars[26] = {0};
  for (int i = 0; i < s.length(); ++i) {
    chars[s[i] - 'a']++;
  }
  int left = 0;
  int right = 25;
  while (left < right) {
    if (chars[left] % 2 == 1) {
      while (left < right && chars[right] % 2 == 0) {
        --right;
      }
      if (left < right) {
        chars[left]++;
        chars[right]--;
      }
    }
    ++left;
  }
  char middle = -1;
  for (int i = 0; i < 26; ++i) {
    if (chars[i] % 2 == 1) {
      middle = i;
    }
    for (int j = 0; j < chars[i] / 2; ++j) {
      cout << (char)(i + 'a');
    }
  }
  if (middle >= 0) {
    cout << (char)(middle + 'a');
  }
  for (int i = 25; i >= 0; --i) {
    for (int j = 0; j < chars[i] / 2; ++j) {
      cout << (char)(i + 'a');
    }
  }
  cout << endl;
  return 0;
}
