Problem:
Score : 200 points

Problem Statement

Sig has built his own keyboard. Designed for ultimate simplicity, this keyboard only has 3 keys on it: the 0 key, the 1 key and the backspace key.

To begin with, he is using a plain text editor with this keyboard. This editor always displays one string (possibly empty). Just after the editor is launched, this string is empty. When each key on the keyboard is pressed, the following changes occur to the string:

The 0 key: a letter 0 will be inserted to the right of the string.

The 1 key: a letter 1 will be inserted to the right of the string.

The backspace key: if the string is empty, nothing happens. Otherwise, the rightmost letter of the string is deleted.

Sig has launched the editor, and pressed these keys several times. You are given a string s, which is a record of his keystrokes in order. In this string, the letter 0 stands for the 0 key, the letter 1 stands for the 1 key and the letter B stands for the backspace key. What string is displayed in the editor now?

Constraints

1 ≦ |s| ≦ 10 (|s| denotes the length of s)

s consists of the letters 0, 1 and B.

The correct answer is not an empty string.

Input

The input is given from Standard Input in the following format:

s

Output

Print the string displayed in the editor in the end.

Sample Input 1

01B0

Sample Output 1

00

Each time the key is pressed, the string in the editor will change as follows: 0, 01, 0, 00.

Sample Input 2

0BB1

Sample Output 2

1

Each time the key is pressed, the string in the editor will change as follows: 0, (empty), (empty), 1.

Solution in C (GCC 9.2.1) (judge verdict: Accepted)

/* ex_9_1
   seira3 */

#include <stdio.h>
#include <stdlib.h>
#define SIZE 11

typedef struct{ //stack型の構造体
    int size;
    int count;
    char data[SIZE];
    char *top;
} stack;

//プロトタイプ宣言
void initialize_stack(stack *stk);
void push(stack *stk, char chara);
int empty(stack *stk);
char pop(stack *stk);
void print_stack(stack *stk);

int main(void){
    char str[SIZE], *ptr; //しぐが押したキーを順番に記録した文字列を入れる配列とポインタを宣言
    stack stk; //stack型のstkを宣言
    scanf("%s",str); //入力
    initialize_stack(&stk); //stkを初期化
    ptr = str; //strの先頭のポインタを代入
    while(*(ptr)!='\0'){ //文字列の外に出るまで
        if(*(ptr)=='B' && empty(&stk)==0){ //その文字がBかつ空出なければ一つ取り出す
            pop(&stk);
        }
        else if(*(ptr)=='0' || *(ptr)=='1'){ //その文字が0か1ならば入れる
            push(&stk,*(ptr));
        }
        ptr++;
    }
    print_stack(&stk); //答えを出力する
    return 0;
}

void initialize_stack(stack *stk){ //stkを初期化
    stk->count = 0;
    stk->size = SIZE;
    stk->top = &(stk->data[0]);
}

void push(stack *stk, char chara){ //stkにcharaを入れる
    if(stk->count >= stk->size){ //オーバーフローしていたらエラーを返す
        printf("Error: stack overflow. (chara=%c)\n", chara);
        exit(1);
    }
    else{
        stk->top++; //topの位置を一つずらして
        *(stk->top) = chara; //topの位置にcharaを代入
        stk->count++; //countを一つ増やす
    }
}

int empty(stack *stk){ //stkが空かどうかを判定
    if(stk->count == 0){ //空なら0を返す
        return 1;
    }
    if(stk->count < 0){ //数がマイナスなら-1を返す
        return -1;
    }
    else{ //中身があれば0を返す
        return 0;
    }
}

char pop(stack *stk){ //stkから一つ取り出す
    char chara;
    if(stk->count <= 0){ //アンダーフローしていればエラーを返す
        printf("Error: stack underflow.\n");
        exit(1);
    }
    else{
        chara = *(stk->top); //今のtopの中身をcharaに代入し
        stk->top--; //topを一つずらし
        stk->count--; //countを一つ減らす
        return chara; //charaを返す
    }
}

void print_stack(stack *stk){
    int i;
    char *ptr;
    ptr = &(stk->data[1]); //一番古いのはdata[1]にある
    for(i=0;i<stk->count;i++){ //入っている分だけ出力
        printf("%c",*ptr++);
    }
    printf("\n"); //改行 
}