Implement a combinatorial back-tracking algorithm to solve the puzzle; add documentation