Essential discrete mathematics for computer science