class SortStack:
    def __init__(self):
        self.sort_stack = Stack()
        self.temp_stack = Stack()

    def __str__(self):
        return f'Sorted stack: {str(self.sort_stack)}\
            Temp stack: {str(self.temp_stack)}'

    def __iter__(self):
        return self.sort_stack.__iter__()

    def push(self, x):
        # pop values until empty or fine the larger one
        if not self.sort_stack.is_empty():
            while True:
                try:
                    peek = self.sort_stack.peek()
                except StackException:
                    break
                if peek < x:
                    pop = self.sort_stack.pop()
                    self.temp_stack.push(pop)
                else:
                    break

        self.sort_stack.push(x)
        # put back smaller values
        if not self.temp_stack.is_empty():
            for i in self.temp_stack:
                self.sort_stack.push(i)

    def pop(self):
        if self.sort_stack.is_empty():
            raise StackException('Cannot pop. Stack is empty')
        return self.sort_stack.pop()

    def peek(self):
        if self.sort_stack.is_empty():
            raise StackException('Cannot peek. Stack is empty')
        return self.sort_stack.peek()

    def is_empty(self):
        return self.sort_stack.is_empty()