depth-first search that chooses values for one variable at a time and returns when a variable has no legal values left to assign
By Marvin Harris at Aug 03 2020