This is the second edition of a popular book on combinatorics, a subject dealing with ways of arranging and distributing objects, and which involves ideas from geometry, algebra and analysis. The breadth of the theory is matched by that of its applications, which include topics as diverse as codes, circuit design and algorithm complexity. It has thus become essential for workers in many scientific fields to have some familiarity with the subject. The authors have tried to be as comprehensive as possible, dealing in a unified manner with, for example, graph theory, extremal problems, designs, colorings and codes. The depth and breadth of the coverage make the book a unique guide to the whole of the subject. The book is ideal for courses on combinatorical mathematics at the advanced undergraduate or beginning graduate level. Working mathematicians and scientists will also find it a valuable introduction and reference.