#include <bits/stdc++.h>
using namespace std;
const int N = 50020, Mod = 998244353, P = 131;
inline int inc(int a, int b) { return a + b >= Mod ? a + b - Mod : a + b; }
inline int dec(int a, int b) { return a - b < 0 ? a - b + Mod : a - b; }
inline int mul(int a, int b) { return 1LL * a * b % Mod; }
inline void Inc(int &a, int b) { return void(a = inc(a, b)); }
inline void Dec(int &a, int b) { return void(a = dec(a, b)); }
inline void Mul(int &a, int b) { return void(a = mul(a, b)); }
int n, _n, Pow[N], val[N], tag[N];
char s[N], _s[N];
inline void Build(int _n) {
  for (int i = 1; i <= _n; i++) val[i] = inc(mul(val[i - 1], P), s[i] - 'a');
  n = _n;
}
inline int Substr(int l, int r) {
  return dec(val[r], mul(Pow[r - l + 1], val[l - 1]));
}
inline int LCP(int x, int y) {
  int l = 0, r = min(y - x, n - y), mid = l + r >> 1;
  for (; l + 1 < r; mid = l + r >> 1)
    Substr(x, x + mid - 1) == Substr(y, y + mid - 1) ? l = mid : r = mid;
  return Substr(x, r) == Substr(y, r) ? r : l;
}
inline int LCS(int x, int y) {
  int l = 0, r = min(x, y - x), mid = l + r >> 1;
  for (; l + 1 < r; mid = l + r >> 1)
    Substr(x - mid + 1, x) == Substr(y - mid + 1, y) ? l = mid : r = mid;
  return Substr(x - r + 1, x) == Substr(y - r + 1, y) ? r : l;
}
inline bool Check(int l) {
  for (int i = 1; i + l <= n; i += l)
    if (s[i] == s[i + l] && LCP(i, i + l) + LCS(i, i + l) >= l) return true;
  return false;
}
int main(void) {
  scanf("%s", s + 1), n = strlen(s + 1), Pow[0] = 1, Build(n);
  for (int i = 1; i <= n; i++) Pow[i] = mul(Pow[i - 1], P);
  for (int l = 1; _n = 0, l <= n >> 1; l++)
    if (Check(l)) {
      for (int i = 1; i + (l << 1) - 1 <= n; i++)
        if (Substr(i, i + l - 1) == Substr(i + l, i + 2 * l - 1))
          tag[i + l] = l, i += l - 1;
      for (int i = 1; i <= n; i++)
        if (tag[i] < l)
          _s[++_n] = s[i];
        else
          i += tag[i] - 1;
      for (int i = 1; i <= _n; i++) s[i] = _s[i];
      Build(_n);
    }
  for (int i = 1; i <= n; i++) putchar(s[i]);
  return puts("") * 0;
}
