/*
 *
 *  Implementáció listával
 */

#include <iostream>

using namespace std;

struct elem
{
    elem *elozo;
    elem *kovetkezo;
    int   ertek;
};

/*
elem *elso = 0;
elem *utolso = 0;
int   elemek_szama = 0;
void beszur( elem *p, int i);
void rendezve_beszur( int i);
void kiir_elore();
void kiir_hatra();
void felszamol();
*/

struct lista
{
    elem *elso;
    elem *utolso;
    int   elemek_szama;

    lista();    // inicializal
    ~lista();   // felszamol
    void beszur( elem *p, int i);
    void rendezve_beszur( int i);
    void kiir_elore();
    void kiir_hatra();
};

int main()
{
    int ii;
    lista l;    // inicializal

    while ( cin >> ii )
    {
        l.rendezve_beszur(ii);
    }
    cout << "elemszam = " << l.elemek_szama << endl;
    l.kiir_elore();
    l.kiir_hatra();
    
    return 0;
    // felszamol
}

lista::lista()
{
    elso = utolso = 0;  // this->elso = this->utolso = 0;
    elemek_szama = 0;   // this->elemek_szama = 0;
}

lista::~lista()
{
    while ( elso )      // this->elso
    {
        elem *kurrens = elso;
        elso = kurrens->kovetkezo;
        // elso->elozo = 0;
        // --elemek_szama;
        delete kurrens;
    }
}

void lista::beszur( elem *p, int ii)
{
    elem *uj = new elem;
    uj->ertek = ii;
    uj->elozo = uj->kovetkezo = 0;
    
    if ( !elso )    // ures a lista
    {
        elso = utolso = uj;
    }
    else if ( !p )  // nem ures lista vegere appendalunk
    {
        uj->elozo = utolso;
        utolso->kovetkezo = uj;
        utolso = uj;
    }
    else if ( p == elso ) // nem ures lista elso poziciojara szurunk be
    {
        uj->kovetkezo = elso;
        elso->elozo = uj;
        elso = uj;
    }
    else    // nem ures lista kozbulso poziciojara szurunk be p ele
    {
        uj->kovetkezo = p;
        uj->elozo = p->elozo;
        uj->elozo->kovetkezo = uj;
        p->elozo = uj;
    }
    ++elemek_szama;
}

void lista::rendezve_beszur( int ii )
{
    elem *kurrens = elso;
    
    while ( kurrens && ii > kurrens->ertek )
    {
        kurrens = kurrens->kovetkezo;
    }
    beszur( kurrens, ii);
}

void lista::kiir_elore()
{
    elem *kurrens = elso;
    
    while ( kurrens )
    {
        cout << kurrens->ertek << endl;
        kurrens = kurrens->kovetkezo;
    }
}

void lista::kiir_hatra()
{
    elem *kurrens = utolso;
    
    while ( kurrens )
    {
        cout << kurrens->ertek << endl;
        kurrens = kurrens->elozo;
    }
}