Theoretical Computer Science:Introduction to automata, computability,complexity, algorithmics, randomization, communication, and cryptography (Springer, 2014)