#include <iostream>
using namespace std;

#define MAX 100

template <typename T>

class Stack {
private:
	int top;
	T arr[MAX];

public:
	Stack() {
		top = -1; 
	}
	void push(T element) 
	{
		if (top == MAX - 1)
		{
			cout << "Stack Overflow" << endl;
		}
		else
		{
			top++;
			arr[top] = element;
		}
	}

	T pop() 
	{
		if (top == -1)
		{
			cout << "Stack Empty";
			return -1;
		}
		else
		{
			return arr[top--];
		}
	}

	bool isStackEmpty()
	{
		return (top == -1);
	}

	bool isStackFull()
	{
		return (top == MAX - 1);
	}

	void peek()
	{
		if (top == -1)
		{
			cout << "Stack Empty";
		}
		else
		{
			cout << "Top element: " << arr[top] << endl;
		}
	}

	T displayStack()
	{
		if (top == -1)
		{
			cout << "Stack Empty";
		}
		else
		{
			cout << "Stack elements: ";
			for (T i = top; i >= 0; i--)
			{
				cout << arr[i] << " ";
			}
			cout << endl;
		}
	}

	void clearStack()
	{
		top = -1;
		cout << "Stack cleared" << endl;
	}

};

int main()
{
	Stack<char> s;
	char y;

	s.push('A');
	s.push('B');
	s.push('C');
	y = s.pop();
	cout << "Popped element: " << y << endl;
	s.peek();
    return 0;
}