#include <bits/stdc++.h>
using namespace std;
const int N = 2005;
const int M = 1000005;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
long long fact(long long n) {
  long long ret = 1;
  for (int i = 1; i <= n; i++) ret *= i;
  return ret;
}
bool is_vowel(char c) {
  if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y')
    return 1;
  return 0;
}
int cnt[27];
int main() {
  string s;
  cin >> s;
  for (int i = 0; i < s.length(); i++) cnt[s[i] - 'a']++;
  queue<int> q;
  stack<int> st;
  deque<int> d;
  for (int i = 0; i < 26; i++) {
    if (cnt[i] % 2) {
      d.push_back(i);
    }
  }
  int odd = -1;
  while (d.size()) {
    int i = d.front();
    d.pop_front();
    if (d.empty())
      odd = i;
    else {
      cnt[i]++;
      int j = d.back();
      d.pop_back();
      cnt[j]--;
    }
  }
  for (int i = 0; i < 27; i++) {
    if (cnt[i] % 2) {
      odd = i;
      cnt[i]--;
    }
    while (cnt[i]) {
      q.push(i);
      st.push(i);
      cnt[i] -= 2;
    }
  }
  while (q.size()) {
    printf("%c", q.front() + 'a');
    q.pop();
  }
  if (odd != -1) printf("%c", odd + 'a');
  while (st.size()) {
    printf("%c", st.top() + 'a');
    st.pop();
  }
  return 0;
}
