input: Write a function to solve any Sudoku puzzle given a 9x9 board where empty cells are represented by 0. Implement a backtracking method to fill in the empty cells with valid numbers while ensuring the Sudoku rules are enforced.
  
  assert solve_sudoku([
      [7,8,0,4,0,0,1,2,0],
      [6,0,0,0,7,5,0,0,9],
      [0,0,0,6,0,1,0,7,8],
      [0,0,7,0,4,0,2,6,0],
      [0,0,1,0,5,0,9,3,0],
      [9,0,4,0,6,0,0,0,5],
      [0,7,0,3,0,0,0,1,2],
      [1,2,0,0,0,7,4,0,0],
      [0,4,9,2,0,6,0,0,7]
  ])==[
      [7, 8, 5, 4, 3, 9, 1, 2, 6],
      [6, 1, 2, 8, 7, 5, 3, 4, 9],
      [4, 9, 3, 6, 2, 1, 5, 7, 8],
      [8, 5, 7, 9, 4, 3, 2, 6, 1],
      [2, 6, 1, 7, 5, 8, 9, 3, 4],
      [9, 3, 4, 1, 6, 2, 7, 8, 5],
      [5, 7, 8, 3, 9, 4, 6, 1, 2],
      [1, 2, 6, 5, 8, 7, 4, 9, 3],
      [3, 4, 9, 2, 1, 6, 8, 5, 7]
  ]
  
  assert solve_sudoku([
      [0, 0, 5, 3, 0, 0, 0, 0, 0],
      [8, 0, 0, 0, 0, 0, 0, 2, 0],
      [0, 7, 0, 0, 1, 0, 5, 0, 0],
      [4, 0, 0, 0, 0, 5, 3, 0, 0],
      [0, 1, 0, 0, 7, 0, 0, 0, 6],
      [0, 0, 3, 2, 0, 0, 0, 8, 0],
      [0, 6, 0, 5, 0, 0, 0, 0, 9],
      [0, 0, 4, 0, 0, 0, 0, 3, 0],
      [0, 0, 0, 0, 0, 9, 7, 0, 0]
  ])==[
      [1, 4, 5, 3, 2, 7, 6, 9, 8],
      [8, 3, 9, 6, 5, 4, 1, 2, 7],
      [6, 7, 2, 9, 1, 8, 5, 4, 3],
      [4, 9, 6, 1, 8, 5, 3, 7, 2],
      [2, 1, 8, 4, 7, 3, 9, 5, 6],
      [7, 5, 3, 2, 9, 6, 4, 8, 1],
      [3, 6, 7, 5, 4, 2, 8, 1, 9],
      [9, 8, 4, 7, 6, 1, 2, 3, 5],
      [5, 2, 1, 8, 3, 9, 7, 6, 4]
  ]
  
  assert solve_sudoku([
      [0, 2, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 6, 0, 0, 0, 0, 3],
      [0, 7, 4, 0, 8, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 3, 0, 0, 2],
      [0, 8, 0, 0, 4, 0, 0, 1, 0],
      [6, 0, 0, 5, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 1, 0, 7, 8, 0],
      [5, 0, 0, 0, 0, 9, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 4, 0]
  ])==[
      [1, 2, 6, 4, 3, 7, 9, 5, 8],
      [8, 9, 5, 6, 2, 1, 4, 7, 3],
      [3, 7, 4, 9, 8, 5, 1, 2, 6],
      [4, 5, 7, 1, 9, 3, 8, 6, 2],
      [9, 8, 3, 2, 4, 6, 5, 1, 7],
      [6, 1, 2, 5, 7, 8, 3, 9, 4],
      [2, 6, 9, 3, 1, 4, 7, 8, 5],
      [5, 4, 8, 7, 6, 9, 2, 3, 1],
      [7, 3, 1, 8, 5, 2, 6, 4, 9]
  ]
output: def solve_sudoku(board):
      def is_valid(board, row, col, num):
          for i in range(9):
              if board[row][i] == num or board[i][col] == num or board[row//3*3 + i//3][col//3*3 + i%3] == num:
                  return False
          return True
  
      def solve(board):
          for row in range(9):
              for col in range(9):
                  if board[row][col] == 0:
                      for num in range(1, 10):
                          if is_valid(board, row, col, num):
                              board[row][col] = num
                              if solve(board):
                                  return True
                              board[row][col] = 0
                      return False
          return True
  
      solve(board)
      return board