# Штаты, которые необходимо покрыть
states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"])

# Станции, на которых вещают имеющиеся радиостанции
stations = {}
stations["kone"] = set(["id", "nv", "ut"])
stations["ktwo"] = set(["wa", "id", "mt"])
stations["kthree"] = set(["or", "nv", "ca"])
stations["kfour"] = set(["nv", "ut"])
stations["kfive"] = set(["ca", "az"])

# Набор радиостанций, покрывающий все необходимые штаты
final_stations = set()

while states_needed:
    best_station = None
    # Штаты, обслуживаемые этой станцией, которые еще не входят в текущее покрытие
    states_covered = set()

    # Перебор всех радиостанций и поиск наилучшей из них
    for station, states_for_station in stations.items():
        # Пересечение множеств необходимых к покрытию станций с станциями для
        # итерируемой радиостанции
        covered = states_needed & states_for_station

        # Если длина множества пересечения больше длины покрытия лучшей текущей станции
        # Иными словами в пересечение входит больше покрываемых штатов, чем для текущей
        # лучшей станции
        if len(covered) > len(states_covered):
            # Назначаем эту станцию лучшей
            best_station = station
            # Переопределяем штаты, покрываемые лучшей на данный момент станцией
            states_covered = covered

    # После прохождения цикла лучшая станция добавляется в список станций для покрытия
    final_stations.add(best_station)

    # Необходимо вычесть из нужных для покрытия станций те, которые входят в найденную
    # станцию
    states_needed -= states_covered

print(final_stations)
