#include <iostream>
using namespace std;
struct node
{
node *next,*back;
int value;
};
struct list
{
node *head,*tail;
};
node *make_node(int value,node *next,node *back)
{
node *tmp=new node;
tmp->value=value;
tmp->next=next;
tmp->back=back;
return tmp;
}
void add_start(list &L,int value)
{
L.head=(L.head?L.head->back:L.tail)=make_node(value,L.head,0);
}
void show_list(const list &L)
{
for(node *i=L.head;i;i=i->next) cout<<i->value<<"\t";
cout<<endl;
}
void sort(list &L)
{
if((L.head)&&(L.head!=L.tail))
{
for(bool more=true;more;)
{
more=false;
for(node *b=L.head,*n=b->next;n;b=n,n=b->next)
{
if(b->value>n->value)
{
(b->back?b->back->next:L.head)=n;
(n->next?n->next->back:L.tail)=b;
n->back=b->back;
b->next=n->next;
n->next=b;
b->back=n;
more=true;
}
}
}
}
}
int main()
{
list L={0,0};
add_start(L,1);
add_start(L,2);
add_start(L,3);
show_list(L);
sort(L);
show_list(L);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApzdHJ1Y3Qgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgCiAgewogICBub2RlICpuZXh0LCpiYWNrOwogICBpbnQgdmFsdWU7CiAgfTsKCnN0cnVjdCBsaXN0CiAgewogICBub2RlICpoZWFkLCp0YWlsOwogIH07CiAKbm9kZSAqbWFrZV9ub2RlKGludCB2YWx1ZSxub2RlICpuZXh0LG5vZGUgKmJhY2spCiAgewogICBub2RlICp0bXA9bmV3IG5vZGU7CiAgIHRtcC0+dmFsdWU9dmFsdWU7CiAgIHRtcC0+bmV4dD1uZXh0OwogICB0bXAtPmJhY2s9YmFjazsKICAgcmV0dXJuIHRtcDsKICB9CiAgCnZvaWQgYWRkX3N0YXJ0KGxpc3QgJkwsaW50IHZhbHVlKQogIHsKICAgTC5oZWFkPShMLmhlYWQ/TC5oZWFkLT5iYWNrOkwudGFpbCk9bWFrZV9ub2RlKHZhbHVlLEwuaGVhZCwwKTsKICB9CiAKdm9pZCBzaG93X2xpc3QoY29uc3QgbGlzdCAmTCkKICB7CiAgIGZvcihub2RlICppPUwuaGVhZDtpO2k9aS0+bmV4dCkgY291dDw8aS0+dmFsdWU8PCJcdCI7CiAgIGNvdXQ8PGVuZGw7CiAgfQogIAp2b2lkIHNvcnQobGlzdCAmTCkKICB7CiAgIGlmKChMLmhlYWQpJiYoTC5oZWFkIT1MLnRhaWwpKQogICAgIHsKICAgICAgZm9yKGJvb2wgbW9yZT10cnVlO21vcmU7KQogICAgICAgIHsKICAgICAgICAgbW9yZT1mYWxzZTsKICAgICAgICAgZm9yKG5vZGUgKmI9TC5oZWFkLCpuPWItPm5leHQ7bjtiPW4sbj1iLT5uZXh0KQogICAgICAgICAgIHsKICAgICAgICAgICAgaWYoYi0+dmFsdWU+bi0+dmFsdWUpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAoYi0+YmFjaz9iLT5iYWNrLT5uZXh0OkwuaGVhZCk9bjsKICAgICAgICAgICAgICAgKG4tPm5leHQ/bi0+bmV4dC0+YmFjazpMLnRhaWwpPWI7CiAgICAgICAgICAgICAgIG4tPmJhY2s9Yi0+YmFjazsKICAgICAgICAgICAgICAgYi0+bmV4dD1uLT5uZXh0OwogICAgICAgICAgICAgICBuLT5uZXh0PWI7CiAgICAgICAgICAgICAgIGItPmJhY2s9bjsKICAgICAgICAgICAgICAgbW9yZT10cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICB9ICAgICAgCiAgICAgICAgfSAgICAgIAogICAgIH0KICB9CiAKaW50IG1haW4oKQogIHsKICAgbGlzdCBMPXswLDB9OwogICBhZGRfc3RhcnQoTCwxKTsKICAgYWRkX3N0YXJ0KEwsMik7CiAgIGFkZF9zdGFydChMLDMpOwogICBzaG93X2xpc3QoTCk7CiAgIHNvcnQoTCk7CiAgIHNob3dfbGlzdChMKTsKICAgcmV0dXJuIDA7CiAgfQ==