Пепелац собирается из отдельных деталей по инструкции. В инструкцию входит перечень подсистем, из которых состоит пепелац (не менее двух), собственных деталей пепелаца и списка всех деталей, которые требуются для сборки (он непуст). Это последняя строка инструкции. В начале инструкции идут описания самих подсистем в формате «имя_системы» «перечень подсистем» «список собственных деталей». Проверить корректность инструкции — соответствует ли она правилам. Если соответствует — вывести «Correct», в противном случае — «Incorrect».
Правила:
- Имя подсистемы — одна заглавная латинская буква (проверять не надо)
- Имя детали — одна строчная латинская буква (проверять не надо)
- «Список» деталей или подсистем — это строка, возможно, пустая
- В разных подсистемах могут встречаться детали с одинаковыми именами
В каждом списке все буквы разные
Поиск детали осуществляется по алгоритму «MRO C3»: в порядке появления подсистем в списке, но также и в том порядке, в котором они требуют детали друг из друга. Если совмещение порядков невозможно, инструкция некорректна
Например, если подсистеме B требуются детали из подсистемы A, но в како-то списке A идет раньше B — инструкция некорректна
Деталь из списка необходимых должна присутствовать среди собственных или в перечисленных подсистемах
A abc B cde C A f D AB e DC e abcdef
Correct
Есть два способа решить задачу: реализовать MRO C3 самостоятельно — или превратить инструкцию по сборке пепелаца в код на Python, выполнить этот код exec()-ом и проверить исключение.
Вот пример некорректных инструкций:
A a
B A b
AB y aby
и
A a
B b
C AB c
D BA d
CAB e acbde