#include #include #include #include #include #include #include struct node { char c; struct node *prev,*next,*last_same; }; struct node *lastup=NULL,*lastlow=NULL; struct node *list=NULL; struct node *insert(char k,struct node *lastnode){ struct node *newnode=NULL; newnode=(struct node *)malloc(sizeof(struct node)); newnode->prev=lastnode; newnode->next=NULL; if(lastnode){ lastnode->next=newnode; } newnode->c=k; bool isup=isupper(k); if(isup){ newnode->last_same=lastup; lastup=newnode; }else{ newnode->last_same=lastlow; lastlow=newnode; } return newnode; } struct node *delect(char k,struct node *lastnode){ struct node *delekt=isupper(k)?lastup:lastlow; if(delekt){ if(delekt->next&&delekt->prev){ delekt->next->prev=delekt->prev; delekt->prev->next=delekt->next; if(delekt==lastup){ lastup=lastup->last_same; }else if(delekt==lastlow){ lastlow=lastlow->last_same; } }else if((!delekt->next)&&delekt->prev){ lastnode=delekt->prev; lastnode->next=NULL; if(delekt==lastup){ lastup=lastup->last_same; }else if(delekt==lastlow){ lastlow=lastlow->last_same; } }else if(delekt->next&&(!delekt->prev)){ list=list->next; list->prev=NULL; if(delekt==lastup){ lastup=NULL; }else if(delekt==lastlow){ lastlow=NULL; } lastnode=NULL; }else{ list->prev=NULL; list->next=NULL; list->last_same=NULL; list->c=0; lastnode=NULL; } free(delekt); } return lastnode; } void printlist(int k,struct node *lastnode){ struct node *now=lastnode; char *strr=(char *)malloc(k+1); strr[k]=0; while(now&&k){ char cur=now->c; *(strr+k-1)=cur; now=now->prev; k--; } printf("%s\n",strr); free(strr); } char str[2000001]="";//开5000不停50分 int main(){ int Q; scanf("%d",&Q); list=(struct node *)malloc(sizeof(struct node)); list->prev=NULL; list->next=NULL; list->last_same=NULL; list->c=0; struct node *currentpos=list; while(scanf("%s",str)!=EOF){ if(*str=='?'){ int k; scanf("%d",&k); printlist(k,currentpos); }else{ int len=strlen(str); for(int i=0;iprev){ currentpos=currentpos->prev; free(currentpos->next); } free(currentpos); return 0; }