Three problems utilizing OOP with recursion, classes, inheritance, assertions, and more:
Part A is a recursive algorithm that returns the permutations (O/N!) of a given input string.
Part B is an improved Caesar Cypher with modular classes and subsequent inheritance that can both encrypt and decrypt messages.
Finally, Part C utilizes Part A's permutation algorithm to build a Substitution Cypher that replaces vowels in a message with a corresponding permutation of vowels.