A branch-and-bound algorithm for the multi-level uncapacitated facility location problem