Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def solve(h, n, triangles, visited):
- if visited[h]:
- return False
- if h == 0:
- return True
- if n >= len(triangles):
- return False
- if h & triangles[n] == triangles[n]:
- if solve(h & ~triangles[n], n + 1, triangles, visited):
- return True
- if solve(h, n + 1, triangles, visited):
- return True
- visited[h] = True
- return False
- def main():
- m = int(input())
- while m != 0:
- names = dict()
- edges = set()
- for _ in range(m):
- a, b = input().split()
- if a not in names:
- names[a] = len(names)
- if b not in names:
- names[b] = len(names)
- edges.add((names[a], names[b]))
- edges.add((names[b], names[a]))
- triangles = [(1 << a) + (1 << b) + (1 << c) for a in range(15) for b in range(a + 1, 15) if (a, b) in edges for c in
- range(b + 1, 15) if
- (a, c) in edges and (c, b) in edges]
- m = int(input())
- visited = [False]*(1<<len(names))
- if solve((1 << len(names)) - 1, 0, triangles, visited):
- print('possible')
- else:
- print('impossible')
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement