a sudoku solver with heuristic