https://medium.com/@suraj_jha/how-i-master-recursion-and-backtracking-48-coding-challenges-9def4c95e363