#include <bits/stdc++.h>
using namespace std;
const int N = 50005;
int n;
char xu[N];
bool ever[N];
unsigned long long h[N], ci[N];
void MakeHash() {
  int i;
  for (i = 1; i <= n; i++) h[i] = h[i - 1] * 29 + xu[i];
}
unsigned long long getval(int l, int r) {
  l--;
  return h[r] - h[l] * ci[r - l];
}
int findqz(int x, int y, int l, int r) {
  if (l == r) return l;
  int mid = (l + r + 1) >> 1;
  if (getval(x - mid + 1, x) == getval(y - mid + 1, y))
    return findqz(x, y, mid, r);
  return findqz(x, y, l, mid - 1);
}
int findhz(int x, int y, int l, int r) {
  if (l == r) return l;
  int mid = (l + r + 1) >> 1;
  if (getval(x, x + mid - 1) == getval(y, y + mid - 1))
    return findhz(x, y, mid, r);
  return findhz(x, y, l, mid - 1);
}
bool Can(int x) {
  int i;
  for (i = x; i + x <= n; i += x) {
    int qz = findqz(i, i + x, 0, x);
    int hz = findhz(i, i + x, 0, min(x, n - i - x + 1));
    if (qz + hz > x) return 1;
  }
  return 0;
}
void Do(int x) {
  memset(ever, 0, sizeof ever);
  int i, j;
  for (i = 2 * x; i <= n;) {
    if (getval(i - x - x + 1, i - x) == getval(i - x + 1, i)) {
      for (j = i - x; j > i - x - x; j--) ever[j] = 1;
      i += x;
    } else
      i++;
  }
  j = 0;
  for (i = 1; i <= n; i++) {
    if (!ever[i]) xu[++j] = xu[i];
  }
  n = j;
}
int main() {
  int i;
  scanf("%s", xu + 1);
  n = strlen(xu + 1);
  ci[0] = 1;
  for (i = 1; i <= n; i++) ci[i] = ci[i - 1] * 29;
  MakeHash();
  for (i = 1; i <= n / 2; i++) {
    if (Can(i)) {
      Do(i);
      MakeHash();
    }
  }
  for (i = 1; i <= n; i++) printf("%c", xu[i]);
  printf("\n");
  return 0;
}
