Почему при вводе данных/аргументов 1 аргумент повторяется 2 раза и выдает ошибку?

Столкнулся с ошибкой, которую не могу исправить самостоятельно. Мне необходимо вывести в обратном порядке имена учеников. Первоначально подается число, сколько людей в группе. Потом подается список учеников

Мой код

n = int(input())

r = {}

for i in range(n + 1):
    k = list(input().split())
    r[k[0]] = k[1]
    key_list = list(r.keys())
    val_list = list(r.values())
    j = list(set(val_list) - set(key_list))[0]
    print(j)
    for i in range(n - 2):
        j = key_list[val_list.index(j)]
        print(*(set(r.keys()) - set(r.values())))
        print(j)

Однако, если написать допустим John и через пробел Mariya, то выйдет что-то подобное

------------ Начало ввода ------------
5
John Mariya
------------ Ввод окончен! -------------
Mariya
John
John
Traceback (most recent call last):
  File "/Users/redwest/PycharmProjects/pythonProject1/main.py", line 37, in <module>
    j = key_list[val_list.index(j)]
ValueError: 'John' is not in list

Process finished with exit code 1

Мне необходимо, чтобы если я мог ввести вначале 5 (людей), и потом допустим

Petr Mariya
Ivan Liza
Mariya Ivan
Igor Petr

он мне выдал

Liza
Ivan
Mariya
Petr
Igor

Являюсь как таковым новичком, поэтому могу что либо недопонимать. Буду благодарен за любую помощь! P.S Полное описание входа/выхода


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

Автор решения: GrAnd

Надо разделить циклы ввода и циклы обработки (не всегда, но в вашем случае надо, т.к. для работы нужны полные данные).

n = int(input())

# обратный словарь: где ключ - имя студента, а значение - имя следующего студента
next_student = {}
for _ in range(n-1):
    name, name_before = list(input().split())
    next_student[name_before] = name

# находим студента который не является следующим ни у кого - он первый
name = (set(next_student.keys()) - set(next_student.values())).pop()
# цикл пока у студента есть следующий студент
while name in next_student:
    print(name)               # печатаем имя
    name = next_student[name] # переходим к следующему студенту
print(name) # печатаем имя последнего студента

Ввод:

5
E D
B A
D C
C B

Вывод:

A
B
C
D
E
→ Ссылка