Combinatorics, a subject dealing with ways of arranging and distributing objects, 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 an essential tool in many scientific fields. In this second edition the authors have made the text as comprehensive as possible, dealing in a unified manner with such topics as 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. It is ideal for courses on combinatorical mathematics at the advanced undergraduate or beginning graduate level, and working mathematicians and scientists will also find it a valuable introduction and reference.