//============ '#' -> 抛弃前一个字符======================
//============ '@' -> 抛弃前面所有的字符==================
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define STACK_INIT_SIZE 100//初始分配量
#define STACKINCREMENT 10//分配增量
//#define EOF -1
#define OVERFLOW 1
//=======================================================
typedef struct ///////定义结构
{
    char *base;
    char *top;
    int stacksize;
}SqStack;
//======================================================
void InitStack(SqStack &S)///初始化栈
{
    S.base=(char *)malloc(STACK_INIT_SIZE *sizeof(char));
    if(!S.base)exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
}

/*char GetTop(SqStack &S,char &e)///获得栈顶元素
{
    if(S.top==S.base)return 0;
    e=*(S.top-1);
    return e;
}*/
//===================================================
void Push(SqStack &S,char e)///入栈
{
    if(S.top-S.base>=S.stacksize)
    {
        S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
        if(!S.base)exit(1);
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++=e;
}
//===================================================
char Pop(SqStack &S,char &e)///出栈
{
    if(S.top==S.base)exit(1);
    e=* --S.top;
    return e;
}
//===================================================
bool StackEmpty(SqStack &S)//判空
{
    if(S.base==S.top)return true;
    return false;
}
//==================================================
void ClearStack(SqStack &S)//清空栈
{
    S.base=S.top;
    S.stacksize=0;
}
//==================================================
void DisplayStack(SqStack &S)
{
    const int max_size=100;
    char str[max_size];
    int i=0,
        j=0;
    char temp=0;
    while(1)
    {
        if(StackEmpty(S))
        {
            //cout<<"Empty."<<endl;
            //printf("Empty.");
            break;
            //exit(1);
        }
        else
        {
            Pop(S,str[i]);
            i++;
            //printf("%c",temp);
            //cout<<temp<<endl;
        }
    }
    for(j=i-1;j>=0;j--)
    {
        printf("%c",str[j]);
    }
    printf("====================");
}
//=================================================
void LineEdit()
{
    SqStack S;
    InitStack(S);
    char c;
    char ch=getchar();
//    while(ch != EOF)
//    {
//        while(ch != EOF && ch != '\n')
        while(ch != '\n')
        {
            switch(ch)
            {
                case'#':Pop(S,c);break;
                case'@':ClearStack(S);break;
                default:Push(S,ch);break;
            }
            ch=getchar();
        }
//        ClearStack(S);
//        if(ch != EOF)
//            ch=getchar();
//    }
    DisplayStack(S);
//    DestoryStack(S);
}
//================================================
int main()
{
    LineEdit();
    system("pause");
    return 0;
}