Probability And Counting Techniques