A First Course in Combinatorial Optimization