CS701 - Theory of Computation
    Introduction to the Theory of Computation by Michael Sipser