Problem Solving with Algorithms and Data Structures