18.404/6.840 Intro to the Theory of Computation