Реконструкция иерархии отделов по парам подчинения
Python
Сложный
dicts
Задача «Реконструкция иерархии отделов по парам подчинения»
Даны пары подчинения сотрудников в формате 'начальник:подчиненный'. Необходимо восстановить полную иерархическую структуру отделов. Каждый сотрудник может иметь несколько подчиненных, но только одного начальника (кроме корневого директора). Входные данные могут содержать циклы или неполные данные — такие случаи нужно игнорировать. Вывести для каждого отдела (самый верхний начальник в цепочке) список всех сотрудников этого отдела в алфавитном порядке, разделенных пробелом. Отделы отсортировать по названию начальника отдела.
Формат ввода
Первая строка содержит целое число N (1 ≤ N ≤ 10000) — количество пар. Затем N строк, каждая вида: 'начальник:подчиненный' (латиница, длина от 1 до 20 символов).
Формат вывода
Для каждого отдела вывести строку: 'начальник отдела: сотрудник1 сотрудник2 ...' (все сотрудники отдела, включая самого начальника, в алфавитном порядке). Отделы отсортировать по имени начальника. Если данные противоречивы (цикл, несколько начальников), то выводится только непротиворечивая часть.
Примеры
Пример 1
ВВОД
4
Alice:Bob
Alice:Charlie
Bob:David
Charlie:Eve
ВЫВОД
Alice: Alice Bob Charlie David Eve
Пример 2
ВВОД
3
X:Y
Y:Z
Z:X
ВЫВОД
Пример 3
ВВОД
2
M:N
M:O
ВЫВОД
M: M N O
Пример 4
ВВОД
ab3c2
ВЫВОД
abababcc
main.py