AtCoder Beginner Contest 225 D - Play Train【Python】

https://atcoder.jp/contests/abc225/tasks/abc225_d

AtCoder ProblemsでDifficulty: 778、Solve Probability: 33%でした。

解けませんでした。
双方向リストも思いつかず、制約の「3xの形式のクエリで出力する電車の番号の個数の合計は106以下」についても、3xのクエリごとの番号の個数の合計が106以下の意味と捉えてしまっていました。
今後こういった制約の文については注意したいところです。

UNICORNプログラミングコンテスト2021(AtCoder Beginner Contest 225) - YouTube

N, Q = map(int, input().split())
front = [-1] * N
back = [-1] * N

for i in range(Q):
    q = list(map(int, input().split()))
    if q[0] == 3:
        x = q[1]-1
        while front[x] != -1:
            x = front[x]
        ans = [x+1]
        while back[x] != -1:
            x = back[x]
            ans.append(x+1)
        print(len(ans), *ans)
    else:
        x, y = q[1]-1, q[2]-1
        if q[0] == 1:
            front[y] = x
            back[x] = y
        elif q[0] == 2:
            front[y] = -1
            back[x] = -1