Computational Complexity I: P and NP