Berth allocation and quay crane assignment using constraint programming