Combinatorial Optimization: Theory and Algorithms