Discrete mathematics for computer scientists