Foundations of discrete mathematics with algorithms and programming. (2019)