import logging from collections import deque from dataclasses import dataclass logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) @dataclass class Person: name: str distance: int @property def is_seller(self): return self.name.endswith("m") graph = { "you": [ Person("bob", 1), Person("claire", 1), Person("alice", 1), ], "claire": [ Person("thom", 0), Person("jonny", 0), ], "alice": [ Person("peggy", 0), ], "bob": [ Person("peggy", 0), Person("anuj", 0), ], "thom": [], "jonny": [], "peggy": [], "anuj": [], } visited = set() def bfs(): queue = deque() queue += graph["you"] while queue: logger.debug(queue) current_person = queue.popleft() if current_person.is_seller: return current_person if current_person.name in visited: continue visited.add(current_person.name) next_persons = graph[current_person.name] for p in next_persons: p.distance = current_person.distance + 1 queue += next_persons to_word = ["", "first", "second", "third"] person = bfs() print(f"{person.name} is a {to_word[person.distance]} degree mango seller.")