It is assumed that the reader has gone through the basic mathematics courses. Although the book was conceived while the authors were teaching Ph.D. students in theoretical computer science and discrete mathematics, it will be useful for a much wider audience, such as mathematicians specializing in other areas, mathematics students deciding what specialization to pursue, or experts in engineering or other fields.