We try to get the get the topologicalSort of the module list, which fails if there is a cycle
When we detect a cycle, we only have the problematic edge. We do a cycle search starting from that edge
Before: We would report the found cycle
After: For every module in that cycle, we do a new breadth-first search for a cycle and we take the shortest one out of all of those, which we then report
How it works: