#include <bits/stdc++.h>
using namespace std;
const int maxn = 55005;
unsigned long long bs[maxn], hs[maxn];
char S[maxn];
int n, fg[maxn];
inline int Get(int l, int r) { return hs[r] - hs[l - 1] * bs[r - l + 1]; }
inline int LCP(int x, int y, int lim) {
  int l = 1, r = lim, ret = 0;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (Get(x - mid + 1, x) == Get(y - mid + 1, y))
      ret = mid, l = mid + 1;
    else
      r = mid - 1;
  }
  return ret;
}
inline int LCS(int x, int y, int lim) {
  int l = 1, r = lim, ret = 0;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (Get(x, x + mid - 1) == Get(y, y + mid - 1))
      ret = mid, l = mid + 1;
    else
      r = mid - 1;
  }
  return ret;
}
bool Find(int len) {
  for (int i = len; i + len <= n; i += len) {
    int tp = LCP(i, i + len, len);
    int ts = LCS(i, i + len, min(len, n - i - len + 1));
    if (tp + ts > len) return 1;
  }
  return 0;
}
void Cutdown(int len) {
  for (int i = 2 * len; i <= n;) {
    if (Get(i - 2 * len + 1, i - len) == Get(i - len + 1, i)) {
      for (int j = i - len; j > i - 2 * len; --j) fg[j] = len;
      i += len;
    } else
      ++i;
  }
  int tot = 0;
  for (int i(1); i <= n; ++i)
    if (fg[i] != len) S[++tot] = S[i];
  n = tot;
  for (int i(1); i <= n; ++i) hs[i] = hs[i - 1] * 31 + S[i];
}
int main() {
  scanf("%s", S + 1);
  n = strlen(S + 1);
  bs[0] = 1;
  for (int i(1); i <= n; ++i) bs[i] = bs[i - 1] * 31;
  for (int i(1); i <= n; ++i) hs[i] = hs[i - 1] * 31 + S[i];
  for (int l(1); l <= n / 2; ++l)
    if (Find(l)) Cutdown(l);
  for (int i(1); i <= n; ++i) putchar(S[i]);
  puts("");
  return 0;
}
