Solving Sudoku with Constraint Programming