Counting Techniques In Discrete Mathematics