Proof Techniques In Discrete Mathematics