Sudoku solver algorithm