''' ****** Задание 17 из 20 ********* * Теория шести рукопожатий гласит, что любые два человека на планете могут быть связаны друг с другом через максимум шесть знакомых. Но мы не будем идти так далеко — давайте ограничимся двумя уровнями знакомства. Напишите программу, которая по списку пар друзей для каждого человека определяет список его друзей второго уровня — то есть друзей его друзей, исключая его самого и его непосредственных друзей. Формат ввода В каждой строке записывается два имени. Окончанием ввода служит пустая строка. Формат вывода Выведите список всех людей и их «друзей 2-го уровня» в формате «Человек: Друг1, Друг2, ...». Список людей и друзей в каждой строке требуется вывести в алфавитном порядке без повторений. Подсказка Сформируйте словарь в котором каждому человеку будет соответствовать множество его друзей. Пройдите по ключам словаря в алфавитном порядке. Для каждого человека сформируйте новое множество как объединение всех множеств друзей друзей. Исключите из полученного множества обрабатываемого человека и список его непосредственных друзей. Пример 1 Ввод Иванов Петров Иванов Сергеев Васильев Петров Сергеев Яковлев Петров Кириллов Петров Яковлев Вывод Васильев: Иванов, Кириллов, Яковлев Иванов: Васильев, Кириллов, Яковлев Кириллов: Васильев, Иванов, Яковлев Петров: Сергеев Сергеев: Петров Яковлев: Васильев, Иванов, Кириллов ''' if __name__ == "__main__": friends = {} while x := input().split(): if x[0] not in friends: friends[x[0]] = {x[1]} else: friends[x[0]].add(x[1]) if x[1] not in friends: friends[x[1]] = {x[0]} else: friends[x[1]].add(x[0]) friends_2 = dict.fromkeys(friends, set()) for friend in friends: for n in friends[friend]: friends_2[friend] = friends_2[friend].union(friends[n]) friends_2[friend].discard(friend) for z in friends[friend]: friends_2[friend].discard(z) data = [] for friend in friends_2: data.append(f'{friend}: {", ".join(sorted(friends_2[friend]))}') data.sort() for string in data: print(string)