public static Schedule ScheduleUnassignedFlights(Schedule schedule)
        {
            if (schedule.UnscheduledFlights.Count == 0)
            {
                return schedule;
            }

            var working = schedule.Clone();
            var unscheduled = new Queue<FlightModel>(
                working.UnscheduledFlights.OrderBy(f => f.Arrives));
            working.ScheduleFlights(unscheduled);
            var best = working.Clone();

            int iterations = working.Flights.Count - 1;
            while (working.UnscheduledFlights.Count > 0 && iterations-- > 0)
            {
                unscheduled.Enqueue(unscheduled.Dequeue());
                working.ScheduleFlights(unscheduled);
                if (working.UnscheduledFlights.Count < best.UnscheduledFlights.Count)
                {
                    best = working.Clone();
                }
            }
            return best;
        }