''' > https://www.codingame.com/ide/puzzle/order-of-succession @author: olivier.massot, 2019 ''' class Person(): def __init__(self, name, parent, birth, death, religion, gender): self.name = name self.parent_name = parent self.birth = int(birth) self.death = death self.religion = religion self.gender = gender self.alive = (self.death == "-") self.catholic = (self.religion == "Catholic") self.male = -1 if self.gender == "M" else 0 self.parent = None self.children = [] def __repr__(self): return self.name family = {p.name: p for p in [Person(*input().split()) for _ in range(int(input()))]} first_ancestor = None for p in family.values(): p.parent = family.get(p.parent_name, None) if not p.parent: first_ancestor = p p.children = sorted([c for c in family.values() if c.parent_name == p.name], key=lambda x: (x.male, x.birth)) def walk(root): succession = [] def add(root): if root.alive and not root.catholic: succession.append(root) for child in root.children: add(child) add(root) return succession succession = walk(first_ancestor) for p in succession: print(p.name)