https://ndlab.blog/posts/95
Recursion & Backtracking: Think in Trees, Code in Functions