Lab 3
Lab 3 -- refactored
Lab 4