Sudoku solution written in Python using constraint propagation and depth first search