Theory of Computation (MCA 303)