Day 36 Part 3 - Add test case for P99.Graph.vertexChooseWord

This tests the case where we choose a word that leads to running out of
possible candidate solutions for other unfilled vertices.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
Day 37 Part 1 - P99.constructGraph

This is used to construct the constraint graph to be used during the search.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
Day 37 Part 2 - complete puzzle solving algorithm

We use a recursive backtracking algorithm that tries out each possible
candidate solution for the best possible row/column, making use of the
constraint graph constructed earlier.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>