Integer Programming: Theory and Practice