A Branch-and-Cut-and-Price algorithm for the Multi-trip Separate Pickup and Delivery Problem with Time Windows at Customers and Facilities