/* Aufgabe 23 Prakash Punnoor */

class Aufgabe23
{
	public static void main ( String[] args )
	{
		/* ein einfacher Test */
		stack s = new stack();
		
		System.out.println("empty: "+s.empty());
		s.push(new Integer(1));System.out.println("push 1");
		System.out.println("empty: "+s.empty());
		s.push(new Integer(2));System.out.println("push 2");
		System.out.println("top: "+s.top());
		s.pop();System.out.println("pop");
		System.out.println("empty: "+s.empty());
		System.out.println("top: "+s.top());
		s.pop();System.out.println("pop");
		System.out.println("empty: "+s.empty());
		System.out.println("top: "+s.top());
		s.pop();System.out.println("pop");
		System.out.println("empty: "+s.empty());
		
		s.push(new Integer(3));System.out.println("push 3");
		System.out.println("empty: "+s.empty());
		System.out.println("top: "+s.top());
		s.pop();System.out.println("pop");
		System.out.println("empty: "+s.empty());

		return;
	}
}

class stack_node
{
	private stack_node prev;
	private Object content;
	
	public void set_prev(stack_node node) { prev = node; }
	public stack_node get_prev() { return prev; }
	
	public void set_content(Object datum) { content = datum; }
	public Object get_content() { return content; }
}

class stack
{
	private stack_node first;
	
	public stack()
	{
		first = null;
	}
	
	public boolean empty()
	{
		return first == null;
	}
	
	public void push(Object datum)
	{
		stack_node node = new stack_node();
		node.set_content(datum);
		node.set_prev(first);
		first = node;
	}
	
	public Object top()
	{
		return empty() ? null : first.get_content();
	}
	
	public void pop()
	{
		if (first != null)
			first = first.get_prev();
	}
}