Lagrangean decomposition for integer programming: theory and applications