import java.util.ArrayList;
import java.util.Scanner;

public class Main {
  /*   思路解析
  1. 为了节省内存空间,不考虑线程安全的情况,
  使用StringBuilder处理字符串效率最高(直接使用String可能会堆溢出)
  2. StringBuilder没有获取指定下标的字符方法,
  所以只能使用substring(i, i + 1)获取第i个下标的字符串
  3. 在判断两相邻的字符是否相等的过程中,为确保无遗漏,每次判断相等删除后,
  都要返回到本次循环的i的上一次,也就是i - 1,
  但如果全程都返回到本次循环的上一次,那么i=0时会报错(i会==-1)
  4. 所以遍历比较的过程中使用if分开判断,同时恰好if和else不会同时执行,
  所以不会让内存使用变大
  */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        StringBuilder stringBuilder = new StringBuilder(in.next());
        for (int i = 0; i < stringBuilder.length() - 1; i++) {
		  //遍历stringBuffer
            if (i == 0) {
			  //如果i==0,则不能返回到本次循环i下标的前一位
			  //只能返回到本次循环的i下标,也无遗漏
                String sb1 = stringBuilder.substring(i, i + 1);
			  //获取下标为i的字符串
                String sb2 = stringBuilder.substring(i + 1, i + 2);
			  //获取下标为i+1的字符串
                if (sb1.equals(sb2)) {
				  //如果i下标和i+1下标的字符串相等
                    stringBuilder.delete(i, i + 2);
				  //删除i 到 i + 1的字符串
                    i--;//返回到本次循环的i下标
                }
            } else {
			  //如果i不等于0,则返回到本次循环i下标的前一位,确保无遗漏
                String sb1 = stringBuilder.substring(i, i + 1);
			  //获取下标为i的字符
                String sb2 = stringBuilder.substring(i + 1, i + 2);
			  //获取下标为i+1的字符
                if (sb1.equals(sb2)) {
				  //如果i下标和i+1下标的字符串相等
                    stringBuilder.delete(i, i + 2);
				  //删除i 到 i + 1的字符串
                    i-=2;//返回到本次循环的前一位
                }
            }
        }
        if (stringBuilder.length() == 0){
		  //如果stringBuffer的长度==0,说明字符串已被清空,输出0
            System.out.println(0);
        } else {
		  //如果stringBuffer的长度不等于0,说明字符串没被清空,输出该字符串
            System.out.println(stringBuilder);
        }
    }
}