""" implement sack ADT
"""
from typing import Any
from typing import List
from random import randint


class Sack():

    """ Sack, inputs are ordered, random output.
    """
    _items:List[Any]

    def __init__(self) -> None:
        """ Create a new, empty Sack self.
        @param Sack self: this sack
        @rtype: None
        """
        self._items = []

    def add(self, obj:Any) -> None:
        """ Add object obj to top of Sack self.
        @param Sack self: this Sack
        @param object obj: object to place on Sack
        @rtype: None
        """
        self._items.append(obj)

    def remove(self) -> Any:
        """
        Remove and return a random element from the Sack self.
        Assume Sack self is not empty.
        @param Sack self: this Sack
        @rtype: object
        >>> s = Sack()
        >>> s.add(5)
        >>> s.add(7)
        >>> s.remove()
        7
        """
        pass

    def is_empty(self) -> bool:
        """
        Return whether Stack self is empty.
        @param Stack self: this Stack
        @rtype: bool
        >>> s = Stack()
        >>> s.add(5)
        >>> s.remove()
        5
        >>> s.is_empty()
        True
        """
        return len(self._items) == 0

    def size(self) -> int:
        """
        Return the size of the stack.
        @param Stack self: this Stack
        @rtype: int

        >>> s = Sack()
        >>> s.add(5)
        >>> s.add(7)
        >>> s.size()
        2
        """
        return len(self._items)


if __name__ == "__main__":
    import doctest
    doctest.testmod()