Combinatorics for computer science