CSCI 311: Algorithms and Data Structures