#include <iostream>
using namespace std;
struct node { int value; node *next; };
struct queue { node *head,*tail; };
void add(queue &Q,int value)
{
node *tmp=new node;
tmp->value=value;
tmp->next=0;
Q.tail=(Q.tail?Q.tail->next:Q.head)=tmp;
}
void show(const queue &Q)
{
for(node *tmp=Q.head;tmp;tmp=tmp->next) cout<<tmp->value<<" -> ";
cout<<endl;
}
bool del(queue &Q,int &value)
{
if(!Q.head) return false;
node *tmp=Q.head;
Q.head=tmp->next;
if(!Q.head) Q.tail=0;
value=tmp->value;
delete tmp;
return true;
}
int main()
{
queue Q={0,0};
add(Q,10);
add(Q,15);
add(Q,20);
add(Q,25);
add(Q,30);
show(Q);
int n;
del(Q,n); cout<<n<<endl;
del(Q,n); cout<<n<<endl;
show(Q);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGUgeyBpbnQgdmFsdWU7IG5vZGUgKm5leHQ7IH07CnN0cnVjdCBxdWV1ZSB7IG5vZGUgKmhlYWQsKnRhaWw7IH07CiAKdm9pZCBhZGQocXVldWUgJlEsaW50IHZhbHVlKQogIHsKICAgbm9kZSAqdG1wPW5ldyBub2RlOwogICB0bXAtPnZhbHVlPXZhbHVlOwogICB0bXAtPm5leHQ9MDsKICAgUS50YWlsPShRLnRhaWw/US50YWlsLT5uZXh0OlEuaGVhZCk9dG1wOwogIH0KIAp2b2lkIHNob3coY29uc3QgcXVldWUgJlEpCiAgewogICBmb3Iobm9kZSAqdG1wPVEuaGVhZDt0bXA7dG1wPXRtcC0+bmV4dCkgY291dDw8dG1wLT52YWx1ZTw8IiAtPiAiOwogICBjb3V0PDxlbmRsOwogIH0KIApib29sIGRlbChxdWV1ZSAmUSxpbnQgJnZhbHVlKQogIHsKICAgaWYoIVEuaGVhZCkgcmV0dXJuIGZhbHNlOwogICBub2RlICp0bXA9US5oZWFkOwogICBRLmhlYWQ9dG1wLT5uZXh0OwogICBpZighUS5oZWFkKSBRLnRhaWw9MDsKICAgdmFsdWU9dG1wLT52YWx1ZTsKICAgZGVsZXRlIHRtcDsKICAgcmV0dXJuIHRydWU7CiAgfQogCmludCBtYWluKCkKICB7CiAgIHF1ZXVlIFE9ezAsMH07CiAgIGFkZChRLDEwKTsKICAgYWRkKFEsMTUpOyAKICAgYWRkKFEsMjApOwogICBhZGQoUSwyNSk7CiAgIGFkZChRLDMwKTsKICAgc2hvdyhRKTsKICAgaW50IG47CiAgIGRlbChRLG4pOyBjb3V0PDxuPDxlbmRsOwogICBkZWwoUSxuKTsgY291dDw8bjw8ZW5kbDsKICAgc2hvdyhRKTsKICAgcmV0dXJuIDA7CiAgfQ==