#include <bits/stdc++.h>
using namespace std;
void fre() {
  freopen("c://test//input.in", "r", stdin);
  freopen("c://test//output.out", "w", stdout);
}
template <class T>
inline void gmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline void gmin(T &a, T b) {
  if (b < a) a = b;
}
const int N = 2e5 + 10, M = 0, Z = 1e9 + 7, ms63 = 1061109567;
char s[N];
int num[128];
int main() {
  while (~scanf("%s", s)) {
    memset(num, 0, sizeof(num));
    int l = strlen(s);
    for (int i = 0; i < l; ++i) ++num[s[i]];
    int h = 'a';
    int t = 'z';
    while (h < t) {
      while (h < t && num[h] % 2 == 0) ++h;
      while (h < t && num[t] % 2 == 0) --t;
      ++num[h];
      --num[t];
    }
    int p = 0;
    for (int i = 'a'; i <= 'z'; ++i) {
      while (num[i] >= 2) {
        s[p] = s[l - 1 - p] = i;
        num[i] -= 2;
        ++p;
      }
      if (num[i] == 1) s[l / 2] = i;
    }
    puts(s);
  }
  return 0;
}
