Mathematical Programming: Structures and Algorithms