#include <bits/stdc++.h>
using namespace std;
const unsigned long long base = 97;
const int N = 50100;
char s[N];
unsigned long long ha[N], p[N];
int len, del[N];
unsigned long long get(int l, int r) {
  return ha[r] - ha[l - 1] * p[r - l + 1];
}
int lcs(int p1, int p2, int r) {
  int l = 1, mid, res = 0;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (get(p1 - mid + 1, p1) == get(p2 - mid + 1, p2))
      res = mid, l = mid + 1;
    else
      r = mid - 1;
  }
  return res;
}
int lcp(int p1, int p2, int r) {
  int l = 1, mid, res = 0;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (get(p1, p1 + mid - 1) == get(p2, p2 + mid - 1))
      res = mid, l = mid + 1;
    else
      r = mid - 1;
  }
  return res;
}
int main() {
  int i, j, k, l1, l2, top;
  bool f;
  scanf("%s", s + 1);
  len = strlen(s + 1);
  p[0] = 1;
  for (i = 1; i <= len; i++) p[i] = p[i - 1] * base;
  for (i = 1; i <= len; i++) ha[i] = ha[i - 1] * base + s[i] - 'a' + 1;
  for (i = 1; i <= len / 2; i++) {
    f = 0;
    for (j = 2 * i; j <= len;) {
      l1 = lcs(j - i, j, i);
      l2 = lcp(j - i + 1, j + 1, len - j);
      if (l1 + l2 >= i) {
        f = 1;
        for (k = 1; k <= i; k++) del[j - i - l1 + k] = 1;
        j += i - l1 + i;
      } else
        j += i;
    }
    if (f) {
      top = 0;
      for (j = 1; j <= len; j++)
        if (!del[j]) s[++top] = s[j];
      len = top;
      for (j = 1; j <= len; j++) del[j] = 0;
      for (j = 1; j <= len; j++) ha[j] = ha[j - 1] * base + s[j] - 'a' + 1;
    }
  }
  for (i = 1; i <= len; i++) printf("%c", s[i]);
  printf("\n");
  return 0;
}
