#include <stdio.h>
#include <stdlib.h>
typedef struct num{
int a;
struct num* next;
}Num;

typedef struct node{
int sum;
struct num* fir;
struct num* end;
}Node;

Node* init_struct(void)
{
    Node *p=NULL;
    p=(Node *)malloc(sizeof(Node));
    p->sum=0;
    p->fir=NULL;
    p->end=NULL;
    return p;
}

Node* add_Node(int su,Node *k)
{
    Node *p=k;
    Num *n=NULL;
    n=(Num *)malloc(sizeof(Num));
    n->a=su;
    (p->sum)++;
    if(p->fir==NULL)                //插链表的第一个元素
    {
        printf("插入链表成功\n");
        p->fir=n;
        p->end=n;
        p->fir->next=p->end;
        p->end->next=NULL;
        return p;
    }
    if(p->sum==2)
    {
        if((n->a)>=(p->fir->a))     //插头
        {
            p->fir->next=n;        //P的下一个
            p->end=n;
            p->end=NULL;
        }
        else                        //插尾
        {
            p->fir=n;
            p->fir->next=p->end;
        }
        printf("插入链表成功????????\n");
        return p;
    }
    Num *pre=p->fir;
    Num *pro=pre;
    while(((n->a)>=(pre->a))&&(pre!=NULL))    //寻找插入位置
    {
        pro=pre;
        pre=pre->next;
    }
    if(pre==(p->fir))    //插头
    {
        n->next=p->fir;
        p->fir=n;
    }
    else if(pre==NULL)   //插尾
    {
        p->end->next=n;
        p->end=n;
        n->next=NULL;
    }
    else      //插中间
    {
        pro->next=n;
        n->next=pre;
    }
    printf("插入链表成功!!!!!\n");
    return p;
}
int print_list(Node *p)
{
    Num *pre=p->fir;
    if(pre==NULL)
    {
        printf("链表什么都没有\n");
        return 1;
    }
    while(1)
    {
        if(pre==NULL)
        break;
        printf("出不来");
        printf("%d\n",pre->a);
        pre=pre->next;
    }
    printf("\n");
    printf("该链表有%d个元素\n",p->sum);
    return 0;
}
int main()
{
    Node* p;
    int n;
    p=init_struct();
    while(1)
    {
        scanf("%d",&n);
        if(n==-1)
        break;
        p=add_Node(n,p);
        //getchar();
    }
    print_list(p);
    free(p);
    p=NULL;
    return 0;
}