Foundations of Computer Science: Algorithms, Structures, and Complexity