An exact algorithm for the pickup and delivery problem with time windows