push and pop implemented