A sudoku solver