#include <stdio.h>
#include <iostream>
using namespace std;
enum {
CMD_LENGTH,
CMD_PRINT,
CMD_INSERT,
CMD_WSTAW,
CMD_WYJMIJ,
CMD_R,
CMD_ERROR
} ecmd;
struct Elem {
int key;
Elem *prev, *next;
Elem(Elem *p, Elem *n, int k) : prev(p), next(n), key(k) { }
};
char cmd;
int n;
int dlugosc=0;
bool isEmptyQueue = true;
Elem *first = 0, *last = 0;
int parseEnum(char cmd)
{
return cmd == 'L' ? CMD_LENGTH :
cmd == 'P' ? CMD_PRINT :
cmd == 'E' ? CMD_WSTAW :
cmd == 'D' ? CMD_WYJMIJ :
cmd == 'R' ? CMD_R :
CMD_ERROR;
}
Elem *search(int key)
{
if(!first)
return NULL;
Elem *tmp = last;
while(tmp->key != key && tmp != first)
tmp = tmp->prev;
if (tmp->key == key)
return tmp;
return NULL;
}
void printAll()
{
if(!first) printf("-\n");
else {
Elem *tmp = first;
while(tmp != last) {
printf("%d<->", tmp->key);
tmp = tmp->next;
}
printf("%d\n", last->key);
}
}
int totalLength()
{
if(!first) return 0;
int len(1);
Elem *tmp = first;
while(tmp->next != NULL) { tmp = tmp->next; len++; }
return len;
}
void wstaw(int n)
{
if (first==0 && totalLength()==0)//nie ma kolejki
{
Elem* A=new Elem(NULL,NULL,n);
last=A;
first=A;
}
else if (dlugosc<totalLength() )//jest kolejka ale z nieużywanym ogonkiem
{
last->key=n;
last=last->next;
}
else if (first==0 && totalLength()!=0)//kolejka jest i jest pusta
{
first=last;
first->key=n;
}
else//kolejka jest i jest pełna
{
Elem* A=new Elem(last,NULL,n);
last->next=A;
last=last->next;
}
dlugosc++;
}
void wyjmij(int n)
{
if (first==0)
{
while(n--)
cout<<"- ";
cout<<endl;
}
else
{
while(dlugosc>1 && n--)
{
cout<<last->key<<" ";
Elem* tmp;
tmp=last;
last=last->prev;
last->next=tmp;
dlugosc--;
}
if (dlugosc==1 && n>0)
{
cout<<last->key<<" ";
first=0;
dlugosc--;
n--;
}
if (dlugosc==0 && n>0)
{
while(n--)
cout<<"- ";
}
cout<<endl;
}
}
int main()
{
int value;
isEmptyQueue = true;
int n;
while(scanf("%c", &cmd) > 0) {
switch (parseEnum(cmd))
{
case CMD_LENGTH:
printf("%d\n", totalLength());
break;
case CMD_PRINT:
printAll();
break;
case CMD_WSTAW:
cin>>n;
wstaw(n);
break;
case CMD_WYJMIJ:
cin>>n;
wyjmij(n);
break;
case CMD_ERROR:
default:
break;
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZW51bSB7CiAgICBDTURfTEVOR1RILAogICAgICAgIENNRF9QUklOVCwKICAgICAgICBDTURfSU5TRVJULAogICAgCUNNRF9XU1RBVywKCQlDTURfV1lKTUlKLAoJCUNNRF9SLAoJCUNNRF9FUlJPUgp9IGVjbWQ7CiAKc3RydWN0IEVsZW0gewogICAgICAgIGludCBrZXk7CiAgICAgICAgRWxlbSAqcHJldiwgKm5leHQ7CiAgICAgICAgRWxlbShFbGVtICpwLCBFbGVtICpuLCBpbnQgaykgOiBwcmV2KHApLCBuZXh0KG4pLCBrZXkoaykgeyB9Cn07CiAKY2hhciBjbWQ7CmludCBuOwppbnQgZGx1Z29zYz0wOwpib29sIGlzRW1wdHlRdWV1ZSA9IHRydWU7CkVsZW0gKmZpcnN0ID0gMCwgKmxhc3QgPSAwOwogCmludCBwYXJzZUVudW0oY2hhciBjbWQpCnsKICAgICAgICByZXR1cm4gY21kID09ICdMJyA/IENNRF9MRU5HVEggOgogICAgICAgICAgICAgICAgY21kID09ICdQJyA/IENNRF9QUklOVCA6CiAgICAgICAgICAgICAgICBjbWQgPT0gJ0UnID8gQ01EX1dTVEFXIDoKCQkJCWNtZCA9PSAnRCcgPyBDTURfV1lKTUlKIDoKCQkJCWNtZCA9PSAnUicgPyBDTURfUiA6CiAgICAgICAgICAgICAgICBDTURfRVJST1I7Cn0KIApFbGVtICpzZWFyY2goaW50IGtleSkKewogICAgICAgIGlmKCFmaXJzdCkKICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgIEVsZW0gKnRtcCA9IGxhc3Q7CiAgICAgICAgd2hpbGUodG1wLT5rZXkgIT0ga2V5ICYmIHRtcCAhPSBmaXJzdCkKICAgICAgICAgICAgICAgIHRtcCA9IHRtcC0+cHJldjsKICAgICAgICAKICAgICAgICBpZiAodG1wLT5rZXkgPT0ga2V5KQogICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgICByZXR1cm4gTlVMTDsKfQogCnZvaWQgcHJpbnRBbGwoKQp7CiAgICAgICAgaWYoIWZpcnN0KSBwcmludGYoIi1cbiIpOyAgICAgICAKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIEVsZW0gKnRtcCA9IGZpcnN0OwogICAgICAgICAgICAgICAgd2hpbGUodG1wICE9IGxhc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlZDwtPiIsIHRtcC0+a2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wLT5uZXh0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHJpbnRmKCIlZFxuIiwgbGFzdC0+a2V5KTsKICAgICAgICB9Cn0KIAppbnQgdG90YWxMZW5ndGgoKQp7CiAgICAgICAgaWYoIWZpcnN0KSByZXR1cm4gMDsKICAgICAgICBpbnQgbGVuKDEpOwogICAgICAgIEVsZW0gKnRtcCA9IGZpcnN0OwogICAgICAgIHdoaWxlKHRtcC0+bmV4dCAhPSBOVUxMKSB7IHRtcCA9IHRtcC0+bmV4dDsgbGVuKys7IH0KICAgICAgICByZXR1cm4gbGVuOwp9Cgp2b2lkIHdzdGF3KGludCBuKQp7CglpZiAoZmlyc3Q9PTAgJiYgdG90YWxMZW5ndGgoKT09MCkvL25pZSBtYSBrb2xlamtpCgl7CgkJRWxlbSogQT1uZXcgRWxlbShOVUxMLE5VTEwsbik7CgkJbGFzdD1BOwoJCWZpcnN0PUE7Cgl9CgllbHNlIGlmIChkbHVnb3NjPHRvdGFsTGVuZ3RoKCkgKS8vamVzdCBrb2xlamthIGFsZSB6IG5pZXXFvHl3YW55bSBvZ29ua2llbQoJewoJCWxhc3QtPmtleT1uOwoJCWxhc3Q9bGFzdC0+bmV4dDsKCX0KCWVsc2UgaWYgKGZpcnN0PT0wICYmIHRvdGFsTGVuZ3RoKCkhPTApLy9rb2xlamthIGplc3QgaSBqZXN0IHB1c3RhCgl7CgkJZmlyc3Q9bGFzdDsKCQlmaXJzdC0+a2V5PW47Cgl9CgllbHNlLy9rb2xlamthIGplc3QgaSBqZXN0IHBlxYJuYQoJewoJCUVsZW0qIEE9bmV3IEVsZW0obGFzdCxOVUxMLG4pOwoJCWxhc3QtPm5leHQ9QTsKCQlsYXN0PWxhc3QtPm5leHQ7Cgl9CglkbHVnb3NjKys7Cn0KCnZvaWQgd3lqbWlqKGludCBuKQp7CglpZiAoZmlyc3Q9PTApCgl7CgkJd2hpbGUobi0tKQoJCQljb3V0PDwiLSAiOwoJCWNvdXQ8PGVuZGw7Cgl9CgllbHNlCgl7CgkJd2hpbGUoZGx1Z29zYz4xICYmIG4tLSkKCQl7CgkJCWNvdXQ8PGxhc3QtPmtleTw8IiAiOwoJCQlFbGVtKiB0bXA7CgkJCXRtcD1sYXN0OwoJCQlsYXN0PWxhc3QtPnByZXY7CgkJCWxhc3QtPm5leHQ9dG1wOwoJCQlkbHVnb3NjLS07CgkJfQoJCWlmIChkbHVnb3NjPT0xICYmIG4+MCkKCQl7CgkJCWNvdXQ8PGxhc3QtPmtleTw8IiAiOwoJCQlmaXJzdD0wOwoJCQlkbHVnb3NjLS07CgkJCW4tLTsKCQl9CgkJaWYgKGRsdWdvc2M9PTAgJiYgbj4wKQoJCXsKCQkJd2hpbGUobi0tKQoJCQkJY291dDw8Ii0gIjsKCQl9CgkJY291dDw8ZW5kbDsKCX0KfQogCmludCBtYWluKCkKewogICAgICAgIGludCB2YWx1ZTsKICAgICAgICBpc0VtcHR5UXVldWUgID0gdHJ1ZTsKCQlpbnQgbjsKICAgICAgICB3aGlsZShzY2FuZigiJWMiLCAmY21kKSA+IDApIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyc2VFbnVtKGNtZCkpCiAgICAgICAgICAgICAgICB7ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENNRF9MRU5HVEg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlZFxuIiwgdG90YWxMZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ01EX1BSSU5UOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50QWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgkJCQkJCWNhc2UgQ01EX1dTVEFXOgoJCQkJCQkJCWNpbj4+bjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c3RhdyhuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCQkJCQkJY2FzZSBDTURfV1lKTUlKOgoJCQkJCQkJCWNpbj4+bjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eWptaWoobik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENNRF9FUlJPUjoKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KIAogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKfQ==