Родословная: 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)

Ответы (0 шт):