input: Write a python function to implement a stack with push, pop, is_empty, peek, and size methods.
  assert s.size() == 0
  s.push(1)
  assert s.size() == 1
  s.push(2)
  assert s.peek() == 2
  assert s.pop() == 2
  assert s.size() == 1
  assert not s.is_empty()
  assert s.pop() == 1
  assert s.is_empty()
output: class Stack:
      def __init__(self):
          self.items = []
  
      def push(self, item):
          self.items.append(item)
  
      def pop(self):
          if not self.is_empty():
              return self.items.pop()
          else:
              raise IndexError("pop from empty stack")
  
      def is_empty(self):
          return len(self.items) == 0
  
      def peek(self):
          if not self.is_empty():
              return self.items[-1]
          else:
              raise IndexError("peek from empty stack")
  
      def size(self):
          return len(self.items)
  
  # Example usage
  s = Stack()
  assert s.size() == 0
  s.push(1)
  assert s.size() == 1
  s.push(2)
  assert s.peek() == 2
  assert s.pop() == 2
  assert s.size() == 1
  assert not s.is_empty()
  assert s.pop() == 1
  assert s.is_empty()