Buggy python submission (verdict: Runtime Error):
from collections import deque

def dfs(v, P, visited, N):
    if len(list(filter(lambda x: x == True, visited))) == N:
        return 1

    c = 0
    for i in P[v]:
        if visited[i]: continue
        visited[i] = True
        c += dfs(i, P, visited, N)
        visited[i] = False

    return c

def resolve():
    N, M = map(int, input().split())
    P = [[] for _ in range(M)]
    for i in range(N):
        pp, ss = map(int, input().split())
        P[pp-1].append(ss-1)
        P[ss-1].append(pp-1)

    visited = [False] * N
    visited[0] = True

    print(dfs(0, P, visited, N))

resolve()

Fixed submission:
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(M)]

visited = [False] * N
visited[0] = True
d = {}
for a, b in A:
    d.setdefault(b-1, []).append(a-1)
    d.setdefault(a-1, []).append(b-1)

l = sorted(d.items())

def dfs(v, seen):
    if False not in seen: return 1
    
    c = 0
    for i in d[v]:
        if (seen[i]): continue
        seen[i] = True
        c += dfs(i, seen)
        seen[i] = False
    return c
    
print(dfs(0, visited))

Buggy python submission (verdict: Runtime Error):
from collections import deque

def dfs(v, P, visited, N):
    if len(list(filter(lambda x: x == True, visited))) == N:
        return 1

    c = 0
    for i in P[v]:
        if visited[i]: continue
        visited[i] = True
        c += dfs(i, P, visited, N)
        visited[i] = False

    return c

def resolve():
    N, M = map(int, input().split())
    P = [[] for _ in range(N)]
    for i in range(N):
        pp, ss = map(int, input().split())
        P[pp-1].append(ss-1)
        P[ss-1].append(pp-1)

    visited = [False] * N
    visited[0] = True

    print(dfs(0, P, visited, N))

resolve()

Fixed submission:
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(M)]

visited = [False] * N
visited[0] = True
d = {}
for a, b in A:
    d.setdefault(b-1, []).append(a-1)
    d.setdefault(a-1, []).append(b-1)

l = sorted(d.items())

def dfs(v, seen):
    if False not in seen: return 1
    
    c = 0
    for i in d[v]:
        if (seen[i]): continue
        seen[i] = True
        c += dfs(i, seen)
        seen[i] = False
    return c
    
print(dfs(0, visited))

Buggy python submission (verdict: Runtime Error):
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]

visited = [False] * N
visited[0] = True
d = {}
for a, b in A:
    d.setdefault(b-1, []).append(a-1)
    d.setdefault(a-1, []).append(b-1)

l = sorted(d.items())

def dfs(v, seen):
    if False not in seen: return 1
    
    c = 0
    for i in d[v]:
        if (seen[i]): continue
        seen[i] = True
        c += dfs(i, seen)
        seen[i] = False
    return c
    
print(dfs(0, visited))



Fixed submission:
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(M)]

visited = [False] * N
visited[0] = True
d = {}
for a, b in A:
    d.setdefault(b-1, []).append(a-1)
    d.setdefault(a-1, []).append(b-1)

l = sorted(d.items())

def dfs(v, seen):
    if False not in seen: return 1
    
    c = 0
    for i in d[v]:
        if (seen[i]): continue
        seen[i] = True
        c += dfs(i, seen)
        seen[i] = False
    return c
    
print(dfs(0, visited))

Buggy python submission (verdict: Runtime Error):
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]

visited = [False] * N
visited[0] = True
d = {}
for a, b in A:
    d.setdefault(a, []).append(b)
    d.setdefault(b, []).append(a)

l = sorted(d.items())

# print(d)
def dfs(v, c):
    if visited[v-1]: return 0
    visited[v-1] = True
    if False not in visited:
        c += 1
    
    # print(visited, False not in visited, c)
    
    # print('vertex', v)
    
    for next_v in d[v]:
        c += dfs(next_v, c)
    
    return c

c = 0
ans = 0
for i in l[0][1]:
    ans += dfs(i, c)
    
print(ans)



Fixed submission:
N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(M)]

visited = [False] * N
visited[0] = True
d = {}
for a, b in A:
    d.setdefault(b-1, []).append(a-1)
    d.setdefault(a-1, []).append(b-1)

l = sorted(d.items())

def dfs(v, seen):
    if False not in seen: return 1
    
    c = 0
    for i in d[v]:
        if (seen[i]): continue
        seen[i] = True
        c += dfs(i, seen)
        seen[i] = False
    return c
    
print(dfs(0, visited))