Providing a self-contained resource for upper undergraduate courses in combinatorics, this text emphasizes computation, problem solving, and proof technique. In particular, the book places special emphasis the Principle of Inclusion and Exclusion and the Multiplication Principle. To this end, exercise sets are included at the end of every section, ranging from simple computations (evaluate a formula for a given set of values) to more advanced proofs. The exercises are designed to test students' understanding of new material, while reinforcing a working mastery of the key concepts previously developed in the book. Intuitive descriptions for many abstract techniques are included. Students often struggle with certain topics, such as generating functions, and this intuitive approach to the problem is helpful in their understanding. When possible, the book introduces concepts using combinatorial methods (as opposed to induction or algebra) to prove identities. Students are also asked to prove identities using combinatorial methods as part of their exercises. These methods have several advantages over induction or algebra.