Mastering Theoretical Computer Science: Computability and Complexity