Combinatorics is a subject of increasing importance because of its links with computer science, statistics, and algebra. This textbook stresses common techniques (such as generating functions and recursive construction) that underlie the great variety of subject matter, and the fact that a constructive or algorithmic proof is more valuable than an existence proof. The author emphasizes techniques as well as topics and includes many algorithms described in simple terms. The text should provide essential background for students in all parts of discrete mathematics.