I think I'm finished. Just need to write some cases that can pass multiple iterations of optimizations