Discrete mathematics: an introduction for software engineers