PDF: foundations of discrete mathematics with algorithms and programming