A composite branch and cut algorithm for optimal shift scheduling with multiple breaks and break windows