#include <vector>
#include <string>
#include <iostream>
#include <iomanip>

using namespace std;

class Car{ //класс машины (марки машин)
public:
    Car(){} // конструктор умолчания
    Car(string m, string c, int p, string a):mark(m),color(c),adress(a),price(p){}
    Car(const Car&)            = default;
    Car& operator=(const Car&) = default;
    ~Car()                     = default;

    void print(){ // вывод элементов на уровне класса "машины"
        cout << endl << mark << ", цвет: " << color << ", цена: " << price << " адрес: " << adress << endl;
    }
private:
    string mark;
    string color;
    string adress;
    int price;
};

Car read()
{
    int price;
    string mark, color, adress;
    cout << "\nВведите марку машины: ";
    cin >> mark;
    cout << "\nВведите цвет машины: ";
    cin >> color;
    cout << "\nВведите адрес: ";
    cin >> adress;
    cout << "\nВведите цену: ";
    cin >> price;
    return Car(mark, color, price, adress);
}

class stack { // класс "стек"
public:
    stack(): cars(new Car[4]), size(0), capacity(4) {}
    stack(const stack&) = delete;
    stack& operator=(const stack&) = delete;
    ~stack() { delete[] cars; }

    void push(const Car& c)
    {
        if (size == capacity)
        {
            Car * tmp = new Car[capacity*=2];
            for(int i = 0; i < size; ++i) tmp[i] = cars[i];
            delete[] cars;
            cars = tmp;
        }
        cars[size++] = c;
    }
    Car pop()
    {
        if (size == 0) throw runtime_error("Stack is empty");
        return cars[--size];
    }
private:
    int size, capacity;
    Car *cars;
};

int main(int argc, const char * argv[])
{
    stack st;
    st.push(read());
    st.pop().print();
    st.push(read());
    st.push(read());
    st.pop().print();
    st.pop().print();
}
