Introduction to Discrete Optimization