We will address the questions:
Does an object with certain properties exist? If so, what structure does such an object have? How many such objects are there?
Enumerative combinatorics is about counting. We will study the main unifying principles, tools, and techniques behind counting. However, enumerative combinatorics is not only about counting. We will learn a basic fact: to count objects, we usually need to understand them first. Accordingly, the underlying discrete structure of mathematical objects
will be one of our main concerns. Most of the studied problems arise from mathematics and theoretical computer science, but we will also
consider problems coming from computational chemistry, economics, and biology.

We present formal methods to tackle
problems concerning enumeration and generation of classes of combinatorial objects, and their application to the analysis of algorithms. We will study some of the fundamental combinatorial structures that appear in most fields of mathematics: permutations, posets, trees, partitions, lattice paths and graphs.