Introduction to Theory of Computing 2