#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:640000000")
using namespace std;
const int INF = (int)(1e9);
const long long INF64 = (long long)(INF) * (long long)(INF);
const double eps = 1e-9;
const double pi = double(3.1415926535897932384626433832795);
inline bool in(int i, int j, int n, int m) {
  return i >= 1 && i <= n && j >= 1 && j <= m;
}
inline int myrand() { return (rand() ^ (rand() << 15)); }
const int dx[] = {0, -1, 1, 0};
const int dy[] = {-1, 0, 0, 1};
template <typename T1, typename T2>
inline ostream &operator<<(ostream &out, const pair<T1, T2> &a) {
  return out << "(" << a.first << "," << a.second << ")";
}
template <typename T>
inline void outArr(const T a[], int n) {}
template <typename T>
inline void out(const T &a) {}
template <typename T1, typename T2>
inline void out(const pair<T1, T2> &a) {}
template <typename T>
inline void out(const vector<T> &a) {}
template <typename T>
inline void out(const set<T> &a) {}
const int N = 2e5 + 555;
string s;
inline void gen() { return; }
inline bool read() {
  cin >> s;
  return true;
}
inline bool check(const string &s) {
  int l = 0, r = (int)((s).size()) - 1;
  while (l < r) {
    if (s[l] != s[r]) return false;
    l++, r--;
  }
  return true;
}
int cnt[256];
inline void solve() {
  int n = (int)((s).size());
  for (int i = 0; i < (int)(n); i++) cnt[s[i]]++;
  int odd = 0;
  vector<int> Odd;
  for (int i = 0; i < (int)(256); i++)
    if (cnt[i] & 1) Odd.push_back(i);
  if ((int)((Odd).size()) > 1) {
    int l = 0, r = (int)((Odd).size()) - 1;
    while (l < r) {
      cnt[Odd[l]]++;
      cnt[Odd[r]]--;
      l++, r--;
    }
  }
  string ans;
  ans.erase();
  int mid = -1;
  for (int i = 0; i < (int)(256); i++)
    if (cnt[i] & 1) mid = i;
  for (int i = 0; i < (int)(256); i++) {
    for (int j = 0; j < (int)(cnt[i] / 2); j++) ans += char(i);
  }
  if (mid > 0) ans += char(mid);
  for (int i = 255; i >= 0; i--) {
    for (int j = 0; j < (int)(cnt[i] / 2); j++) ans += char(i);
  }
  assert(check(ans));
  cout << ans << endl;
  return;
}
int main() {
  cout << setprecision(10) << fixed;
  cerr << setprecision(10) << fixed;
  srand(int(time(NULL)));
  int T = 1;
  for (int i = 0; i < (int)(T); i++) {
    assert(read());
    solve();
  }
  return 0;
}
