#include <iostream>

using namespace std;

int stsize = 4;
int estack = 0;
int *mstack;

void push()
{
	if (estack==stsize){
		cout<<"Stack is full"<<endl;
		return;
		}
	int el=0;
	cout<<"Element to Push? ";
	cin>>el;
	cout<<endl;
	mstack[estack]=el;
	estack++;	
}

int pop()
{
	if (estack==0) {
		cout<<"Stack is empty"<<endl;
		return -1;
	}
	int el=0;
	estack--;	
	el=mstack[estack];
	cout<<"Element is "<<el<<endl;
	return el;
}

void setstacksize(){
	int ssi = 0;
	cout<<"Enter new stack size: ";
	cin>>ssi;
	cout<<endl;
	stsize=ssi;
	return;
}

void clearstack()
{
	estack=0;
	return;
}

void dumpstack()
{
	cout<<"Stack..."<<endl;
	cout<<endl;
	cout<<"Stack Size: "<<stsize<<endl;
	cout<<"Stack Element: "<<estack<<endl;
	cout<<"El."<<"Value"<<endl;
	for (int i=0;i<estack;i++){
		cout<<i<<mstack[i]<<endl;
	}
	return;
}

int main () {
	mstack = new int[stsize];
	bool ext=false;
	while (!ext) {
	cout<<"Stack Demo"<<endl;
	cout<<endl;
	cout<<"1) Push element"<<endl;
	cout<<"2) Pop element"<<endl;	
	cout<<"3) Set stack Size"<<endl;	
	cout<<"4) Clear Stack"<<endl;
	cout<<"5) Write Stack"<<endl;
	cout<<"99) Exit"<<endl;	
	int wyb=0;
	cin>>wyb;
	cout<<endl;
		switch (wyb)
		{
		case 99: ext=true;
		break;
		case 1: push();
		break;
		case 2: pop();
		break;
		case 3: setstacksize();
		break;
		case 4: clearstack();
		break;
		case 5: dumpstack();
		break;		
		}
	}
	return 0;
}