input: Write a python function to restore a shape from a dictionary and verify its area.
  assert restore_shape({'type': 'circle', 'radius': 5}).area() == 78.5
  assert restore_shape({'type': 'triangle', 'side1': 3, 'side2': 4, 'side3': 5}).area() == 6.0
  assert restore_shape({'type': 'square', 'side': 4}).area() == 16
output: import math
  
  class Shape:
      def area(self):
          pass
  
  class Circle(Shape):
      def __init__(self, radius):
          self.radius = radius
      
      def area(self):
          return round(math.pi * self.radius ** 2, 1)
  
  class Triangle(Shape):
      def __init__(self, side1, side2, side3):
          self.side1 = side1
          self.side2 = side2
          self.side3 = side3
      
      def area(self):
          s = (self.side1 + self.side2 + self.side3) / 2
          return round(math.sqrt(s * (s - self.side1) * (s - self.side2) * (s - self.side3)), 1)
  
  class Square(Shape):
      def __init__(self, side):
          self.side = side
      
      def area(self):
          return self.side ** 2
  
  def restore_shape(shape_dict):
      shape_type = shape_dict['type']
      if shape_type == 'circle':
          return Circle(shape_dict['radius'])
      elif shape_type == 'triangle':
          return Triangle(shape_dict['side1'], shape_dict['side2'], shape_dict['side3'])
      elif shape_type == 'square':
          return Square(shape_dict['side'])