Родословная: LCA. 13/14 тестов прошло, непрошедший - ошибка при исполнении программы
Помогите найти часть кода, которая сбоит при выполнении кода.
Родословная: LCA
В генеалогическом древе определите для двух элементов их наименьшего общего предка. Наименьшим общим предком элементов A и B является такой элемент C, что С является предком A, C является предком B, при этом глубина C является наибольшей из возможных. При этом элемент считается своим собственным предком.
Входные данные
Программа получает на вход число элементов в генеалогическом древе N . Далее следует N−1 строка, задающие родителя для каждого элемента древа, кроме родоначальника. Каждая строка имеет вид имя_потомка имя_родителя. Далее до конца файла идут строки, содержащие имена двух элементов дерева.
Выходные данные
Для каждого запроса выведите наименьшего общего предка данных элементов.
Примечание По-английски такая задача называется lowest common ancestor (LCA).
Примеры
входные данные
9
Alexei Peter_I
Anna Peter_I
Elizabeth Peter_I
Peter_II Alexei
Peter_III Anna
Paul_I Peter_III
Alexander_I Paul_I
Nicholaus_I Paul_I
Alexander_I Nicholaus_I
Peter_II Paul_I
Alexander_I Anna
выходные данные
Paul_I
Peter_I
Anna
import sys
#Подпрограмма для нахождения путя от name2 до корня
#В way (словарь) записывается ключ name1, значение 1. Т.к. путь нам нужен только для определения есть ли имя в нём, будем использовать словарь, т.к. in для словаря работает за отсчёт хеша, а не за n.
#В названии функции смысла нет.
def treedpps(name1, name2):
way[name2][name1] = 1
if name1 == predok[name1]:
return
treedpps(predok[name1], name2)
#Откроем файл для ввода
sys.stdin = open('input.txt', 'r')
#Создадим словарь, в который будем складывать ввод в формате потомок: предок
predok = dict()
#Введём кол-во людей в древе
n = int(sys.stdin.readline())
if n != 1:
# Заполним словарь predok по ранее указанному формату
for i in range(n - 1):
a, b = sys.stdin.readline().split()
predok[a] = b
#Найдём корень древа
koren = list(set(list(dct.values())) - set(list(dct.keys())))[0]
#Т.к. корень древа в predok в качестве ключа не попал, заложим туда пару корень: корень
predok[koren] = koren
#Создадим словарь way в который запишем пути всех потомков до их корня (Сам человек тоже хранится, поэтому путь корня: [корень]
way = dict()
for name in dct:
way[name] = dict()
treedpps(name, name)
#Будем вводить двух людей, для которых нужно найти LCA
for line in sys.stdin.readlines():
a, b = line.strip().split()
name = '***'
# За O(n) найдём LCA для a и b. ( Т.к. в словарях ключи хранятся в порядке их введения, первый найденный общий предок - LCA )
flag = False
for kid in way[a]:
if kid in way[b]:
name = kid
flag = True
if flag:
break
# Выведем LCA
print(name)