Buggy python submission (verdict: Time Limit Exceeded):
#!/usr/bin/env python3

import sys, math, copy
from collections import deque
# import fractions, itertools
# import numpy as np
# import scipy

HUGE = 2147483647
HUGEL = 9223372036854775807
ABC = "abcdefghijklmnopqrstuvwxyz"

def adj_node(path, neighbor):
    for end in [path[0], path[-1]]:
        for node in neighbor[end - 1]:
            if node not in path:  # slow
                is_begin = (end == path[0])
                return node, is_begin
    return None, True

def get_path():
    n, m = map(int, input().split())
    am = []
    bm = []
    for i in range(m):
        a, b = map(int, input().split())
        am.append(a)
        bm.append(b)
    assert len(am) == len(bm) == m

    neighbor = [[] for j in range(n)]
    for i in range(m):
        a, b = am[i], bm[i]
        neighbor[a - 1].append(b)
        neighbor[b - 1].append(a)

    path = deque([am[0], bm[0]])
    for j in range(10 ** 6):
        node, is_begin = adj_node(path, neighbor)
        if node is None:
            return path
        if is_begin:
            path.appendleft(node)
        else:
            path.append(node)

def main():
    path = get_path()
    print(len(path))
    print(" ".join(map(str, path)))

main()


Fixed submission:
#!/usr/bin/env python3

import sys, math, copy
from collections import deque
# import fractions, itertools
# import numpy as np
# import scipy

HUGE = 2147483647
HUGEL = 9223372036854775807
ABC = "abcdefghijklmnopqrstuvwxyz"

def adj_node(path, paths, neighbor):
    for end in [path[0], path[-1]]:
        for node in neighbor[end - 1]:
            if node not in paths:
                is_begin = (end == path[0])
                return node, is_begin
    return None, True

def get_path():
    n, m = map(int, input().split())
    am = []
    bm = []
    for i in range(m):
        a, b = map(int, input().split())
        am.append(a)
        bm.append(b)
    assert len(am) == len(bm) == m

    neighbor = [[] for j in range(n)]
    for i in range(m):
        a, b = am[i], bm[i]
        neighbor[a - 1].append(b)
        neighbor[b - 1].append(a)

    path = deque([am[0], bm[0]])
    paths = set(path)
    for j in range(10 ** 6):
        node, is_begin = adj_node(path, paths, neighbor)
        if node is None:
            return path
        paths.add(node)
        if is_begin:
            path.appendleft(node)
        else:
            path.append(node)

def main():
    path = get_path()
    print(len(path))
    print(" ".join(map(str, path)))

main()

Buggy python submission (verdict: Time Limit Exceeded):
#!/usr/bin/env python3

import sys, math, copy
# import fractions, itertools
# import numpy as np
# import scipy

HUGE = 2147483647
HUGEL = 9223372036854775807
ABC = "abcdefghijklmnopqrstuvwxyz"

def adj_node(path, neighbor):
    for end in [path[0], path[-1]]:
        for node in neighbor[end - 1]:
            if node not in path:
                is_begin = (end == path[0])
                return node, is_begin
    return None, True

def get_path():
    n, m = map(int, input().split())
    am = []
    bm = []
    for i in range(m):
        a, b = map(int, input().split())
        am.append(a)
        bm.append(b)
    assert len(am) == len(bm) == m

    neighbor = [[] for j in range(n)]
    for i in range(m):
        a, b = am[i], bm[i]
        neighbor[a - 1].append(b)
        neighbor[b - 1].append(a)

    path = [am[0], bm[0]]
    for j in range(10 ** 6):
        node, is_begin = adj_node(path, neighbor)
        if node is None:
            return path
        if is_begin:
            path = [node] + path
        else:
            path.append(node)

def main():
    path = get_path()
    print(len(path))
    print(" ".join(map(str, path)))

main()


Fixed submission:
#!/usr/bin/env python3

import sys, math, copy
from collections import deque
# import fractions, itertools
# import numpy as np
# import scipy

HUGE = 2147483647
HUGEL = 9223372036854775807
ABC = "abcdefghijklmnopqrstuvwxyz"

def adj_node(path, paths, neighbor):
    for end in [path[0], path[-1]]:
        for node in neighbor[end - 1]:
            if node not in paths:
                is_begin = (end == path[0])
                return node, is_begin
    return None, True

def get_path():
    n, m = map(int, input().split())
    am = []
    bm = []
    for i in range(m):
        a, b = map(int, input().split())
        am.append(a)
        bm.append(b)
    assert len(am) == len(bm) == m

    neighbor = [[] for j in range(n)]
    for i in range(m):
        a, b = am[i], bm[i]
        neighbor[a - 1].append(b)
        neighbor[b - 1].append(a)

    path = deque([am[0], bm[0]])
    paths = set(path)
    for j in range(10 ** 6):
        node, is_begin = adj_node(path, paths, neighbor)
        if node is None:
            return path
        paths.add(node)
        if is_begin:
            path.appendleft(node)
        else:
            path.append(node)

def main():
    path = get_path()
    print(len(path))
    print(" ".join(map(str, path)))

main()