Proof techniques, with emphasis on induction and existence proofs such as diagonalization, pigeonhole principle; probabilistic analysis and techniques; techniques for the design and analysis of algorithms; cryptography and number theory; recurrence relations; elements of graph theory.