Sudoku solver using constraint propagation