Introduction to Data Structures and Algorithms