#include <bits/stdc++.h>
using namespace std;
const int Maxn = 5010;
const int inf = 2147483647;
char s[Maxn];
int n, c = 0, f[1 << 12][Maxn], a[Maxn];
void upd(int S, int i, int x) {
  if (f[S][i] == -1)
    f[S][i] = x;
  else if (s[x] < s[f[S][i]])
    f[S][i] = x;
}
int main() {
  memset(f, -1, sizeof(f));
  scanf("%s", s + 1);
  n = strlen(s + 1);
  if (n == 1) return printf("%s", s + 1), 0;
  int t = 1, tn = n;
  while (t < tn) tn -= t, c++, t <<= 1;
  t--;
  a[1] = -1;
  for (int i = 1; i <= t + 1; i++) {
    if (a[1] == -1)
      a[1] = i;
    else if (s[i] < s[a[1]])
      a[1] = i;
  }
  for (int i = 1; i <= t + 1; i++)
    if (s[i] == s[a[1]]) f[i - 1][1] = i;
  for (int i = 1; i <= tn; i++) {
    if (i != 1) {
      a[i] = -1;
      for (int S = 0; S < (1 << c); S++)
        if (f[S][i] != -1) {
          if (a[i] == -1)
            a[i] = f[S][i];
          else if (s[f[S][i]] < s[a[i]])
            a[i] = f[S][i];
          for (int j = 0; j < c; j++)
            if (!((1 << j) & S) && n - f[S][i] >= (1 << j))
              upd(S | (1 << j), i, f[S][i] + (1 << j));
        }
    }
    if (i == tn) break;
    for (int S = 0; S < (1 << c); S++)
      if (f[S][i] != -1 && s[f[S][i]] == s[a[i]]) {
        upd(S, i + 1, f[S][i] + 1);
        for (int j = 0; j < c; j++)
          if (!((1 << j) & S) && n - f[S][i] > (1 << j))
            upd(S | (1 << j), i + 1, f[S][i] + (1 << j) + 1);
      }
  }
  for (int i = 1; i <= tn; i++) printf("%c", s[a[i]]);
}
