Using the shapes and a generator a list of rules (one per shape/generator config) is created
The list is then used to generate another list that contains all of the possible combinations of the first list, with any rule not capable of being combined being added to a result list
This step is now repeated until the list becomes empty
|
|