Combinatorics is a subject of increasing importance, owing to its links with computer science, statistics and algebra. This is a textbook aimed at second-year undergraduates to beginning graduates. It stresses common techniques (such as generating functions and recursive construction) which underlie the great variety of subject matter and also stresses the fact that a constructive or algorithmic proof is more valuable than an existence proof. The book is divided into two parts, the second at a higher level and with a wider range than the first. Historical notes are included which give a wider perspective on the subject. More advanced topics are given as projects and there are a number of exercises, some with solutions given.