#include <bits/stdc++.h>
using namespace std;
int i, j, k, n, m, len, num;
int a[100010], F[100010];
unsigned long long b[100010], h[100010];
char p[100010];
inline void pre() {
  for (i = 1; i <= n; i++) b[i] = b[i - 1] * 31 + a[i];
}
inline unsigned long long get(int l, int r) {
  return b[r] - b[l - 1] * h[r - l + 1];
}
inline bool yes(int l, int r) { return get(l, r - 1) == get(r, r + len - 1); }
inline int find_l(int x, int y) {
  int l = 0, r = len, mid;
  for (; l <= r;) {
    mid = (l + r) / 2;
    if (get(x - mid + 1, x) == get(y - mid + 1, y))
      l = mid + 1;
    else
      r = mid - 1;
  }
  return l - 1;
}
inline int find_r(int x, int y) {
  int l = 0, r = min(len, n - y + 1), mid;
  for (; l <= r;) {
    mid = (l + r) / 2;
    if (get(x, x + mid - 1) == get(y, y + mid - 1))
      l = mid + 1;
    else
      r = mid - 1;
  }
  return l - 1;
}
int main() {
  scanf("%s", p + 1);
  n = strlen(p + 1);
  for (i = 1; i <= n; i++) {
    int A = p[i] - 'a' + 1;
    if (!m || a[m] != A) a[++m] = A;
  }
  n = m;
  pre();
  h[0] = 1;
  for (i = 1; i <= n; i++) h[i] = h[i - 1] * 31;
  for (len = 2; len <= n / 2; len++) {
    int flag = 0;
    for (j = len; j + len <= n; j += len) {
      k = j + len;
      int L = find_l(j, k), R = find_r(j, k);
      if (L + R - 1 >= len) {
        flag = 1;
        break;
      }
    }
    if (flag) {
      ++num;
      for (j = 1; j + 2 * len - 1 <= n;) {
        if (yes(j, j + len)) {
          for (k = j; k <= j + len - 1; k++) F[k] = num;
          j += len;
          continue;
        }
        j++;
      }
      m = 0;
      for (j = 1; j <= n; j++)
        if (F[j] != num) a[++m] = a[j];
      n = m;
      pre();
    }
  }
  for (i = 1; i <= n; i++) printf("%c", 'a' + a[i] - 1);
  printf("\n");
  return 0;
}
