Combinatorics: Theory and applications