Find times when everyone is free. Each calendar is a list of busy ("HH:MM", "HH:MM") intervals (unsorted, possibly overlapping). Implement:
free_slots(calendars, day_start, day_end, min_minutes): the list of ("HH:MM", "HH:MM") gaps within the working day when nobody is busy, keeping only gaps of at least min_minutes. Busy intervals that touch or overlap merge together, and busy time outside the working day is ignored.first_slot(calendars, day_start, day_end, minutes): the earliest (start, end) meeting of exactly minutes, or None