input: Write a python function to generate a path in a 5x5 grid avoiding obstacles (marked as 1) from the top left corner to the bottom right corner.
  assert generate_path([[0, 0, 0, 0, 0], [1, 1, 1, 1, 0], [0, 0, 0, 0, 0], [0, 1, 1, 1, 1], [0, 0, 0, 0, 0]]) == ['down', 'down', 'down', 'right', 'right', 'right', 'right', 'down', 'Destination Reached']
  assert generate_path([[0, 0, 1, 0, 0], [1, 0, 1, 1, 0], [0, 0, 0, 0, 0], [0, 1, 1, 1, 1], [0, 0, 0, 0, 0]]) == ['down', 'right', 'right', 'down', 'down', 'down', 'right', 'right', 'Destination Reached']
  assert generate_path([[0, 1, 1, 1, 1], [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 1, 0, 1, 0], [0, 0, 0, 1, 0]]) == ['down', 'down', 'down', 'down', 'right', 'right', 'right', 'right', 'Destination Reached']
output: def generate_path(grid):
      def is_valid(x, y):
          return 0 <= x < 5 and 0 <= y < 5 and grid[x][y] == 0
  
      def find_path(x, y, path):
          if x == 4 and y == 4:
              path.append("Destination Reached")
              return True
          if is_valid(x + 1, y):
              path.append("down")
              if find_path(x + 1, y, path):
                  return True
              path.pop()
          if is_valid(x, y + 1):
              path.append("right")
              if find_path(x, y + 1, path):
                  return True
              path.pop()
          return False
  
      path = []
      if find_path(0, 0, path):
          return path
      return []