lines = [ i.split('-') for i in open("input.txt", 'r').read().splitlines()] paths = [] di = {} for l in lines: if l[0] not in di: di[l[0]] = [] di[l[0]].append(l[1]) if l[1] not in di: di[l[1]] = [] di[l[1]].append(l[0]) def travel(stack, node): stack.append(node) if node == 'end': paths.append(stack.copy()) for n in di[node]: #if n not in stack or n.isupper(): if (not(n in stack and any(stack.count(i) > 1 for i in [j for j in stack if j.islower()])) or n.isupper()) and n != 'start' and stack[-1] != 'end': travel(stack,n) stack.pop() for start in di['start']: stack = ['start'] travel(stack, start) print(len([i for i in paths if not any(i.count(j) > 1 for j in i if j.islower())])) print(len(paths))