/*
 *  A dinamikus memóriában lefoglalunk valamekkora méretű tárterületet,
 *  ha a tárterület betelne, újabbat foglalunk le és átmásoljuk az eddig
 *  beolvasott elemeket.
 */

#include <iostream>

using namespace std;

void grow( int *&tp, int& sz);

int main()
{
    int size = 10;
    int *tp = new int[size];
    int i = 0;

    while ( cin >> tp[i] )
    {
        ++i;
        if ( i == size )
            grow( tp, size);
    }
    for ( int j = i-1; j >= 0; --j)
    {
        cout << tp[j] << endl;
    }
    delete [] tp;
    return 0;
}

void grow( int *&tp, int& sz)
{
    int *newtp = new int[2*sz];
    
    for ( int ii = 0; ii < sz; ++ii)
    {
        newtp[ii] = tp[ii];
    }
    delete [] tp;
    sz = 2*sz;
    tp = newtp;
}