Concepts from discrete structures such as set theory, logic, basics of counting, graphs and trees, elementary number theory, and combinatorics. Implementation of these theoretical concepts in software.