Implicit enumeration algorithms for discrete optimization problems