#include <bits/stdc++.h>
using namespace std;
const unsigned long long B = 31;
const int maxn = 50005;
int n, ban, s[maxn], tag[maxn];
char _s[maxn];
unsigned long long h[maxn], pw[maxn];
unsigned long long calc_hash(int l, int r) {
  return h[r] - h[l - 1] * pw[r - l + 1];
}
void init_hash() {
  for (int i = 1; i <= n; i++) {
    h[i] = h[i - 1] * B + s[i];
  }
}
int get_lcs_L(int x, int y) {
  int l = 1, r = x - ban;
  for (; l <= r;) {
    int mid = l + r >> 1;
    if (calc_hash(x - mid + 1, x) != calc_hash(y - mid + 1, y))
      r = mid - 1;
    else
      l = mid + 1;
  }
  return r;
}
int get_lcs_R(int x, int y) {
  int l = 1, r = n - y + 1;
  for (; l <= r;) {
    int mid = l + r >> 1;
    if (calc_hash(x, x + mid - 1) != calc_hash(y, y + mid - 1))
      r = mid - 1;
    else
      l = mid + 1;
  }
  return r;
}
void del(int x, int y, int z) {
  for (int i = x; i <= y; i++) tag[i] = z;
}
void print() {
  for (int i = 1; i <= n; i++) putchar(s[i] + 'a');
  puts("");
}
int main() {
  scanf("%s", _s + 1);
  n = strlen(_s + 1);
  pw[0] = 1;
  for (int i = 1; i <= n; i++) pw[i] = pw[i - 1] * B;
  for (int i = 1; i <= n; i++) s[i] = _s[i] - 'a';
  init_hash();
  for (int len = 1; len + len <= n; len++) {
    int find = 0;
    ban = 0;
    for (int i = len; i + len <= n; i += len) {
      if (s[i] != s[i + len]) continue;
      int dL = get_lcs_L(i, i + len);
      int dR = get_lcs_R(i + 1, i + len + 1);
      if (dL + dR >= len) {
        del(i - dL + 1, i - dL + len, len);
        ban = i - dL + len;
        find = 1;
      }
    }
    if (find) {
      int t = 0;
      for (int i = 1; i <= n; i++)
        if (tag[i] != len) s[++t] = s[i];
      n = t;
      init_hash();
    }
  }
  print();
  return 0;
}
