input: Write a python function to determine if a given puzzle board can be solved to match the goal state.
  assert solver([[1, 2, 3], [4, 5, 6], [7, 8, 0]]) == True
  assert solver([[1, 2, 3], [4, 5, 6], [0, 7, 8]]) == True
  assert solver([[1, 2, 3], [5, 0, 6], [4, 7, 8]]) == False
output: def solver(board):
      def get_inversion_count(flat_board):
          inversions = 0
          for i in range(len(flat_board)):
              for j in range(i + 1, len(flat_board)):
                  if flat_board[i] > flat_board[j] and flat_board[j] != 0:
                      inversions += 1
          return inversions
  
      def is_solvable(board):
          flat_board = [num for row in board for num in row]
          inversions = get_inversion_count(flat_board)
          return inversions % 2 == 0
  
      return is_solvable(board)