Really happy with my approach in terms of data structure, looks like it should make it fairly easy to do part 2