Really awesome job! The code is very well organized and easy to read. I can tell you put a lot of thought and work into this. I even saw something in your solution that I forgot to include in mine, so thanks for that. Overall great job, keep it up!
Marked as helpful