Branch and Bound algorithm