Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.29 KB | None | 0 0
  1. def solve(h, n, triangles, visited):
  2.     if visited[h]:
  3.         return False
  4.        
  5.     if h == 0:
  6.         return True
  7.  
  8.     if n >= len(triangles):
  9.         return False
  10.    
  11.     if h & triangles[n] == triangles[n]:
  12.         if solve(h & ~triangles[n], n + 1, triangles, visited):
  13.             return True
  14.  
  15.     if solve(h, n + 1, triangles, visited):
  16.         return True
  17.  
  18.     visited[h] = True
  19.    
  20.     return False
  21.  
  22. def main():
  23.     m = int(input())
  24.     while m != 0:
  25.         names = dict()
  26.         edges = set()
  27.         for _ in range(m):
  28.             a, b = input().split()
  29.             if a not in names:
  30.                 names[a] = len(names)
  31.             if b not in names:
  32.                 names[b] = len(names)
  33.  
  34.             edges.add((names[a], names[b]))
  35.             edges.add((names[b], names[a]))
  36.  
  37.         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
  38.                  range(b + 1, 15) if
  39.                  (a, c) in edges and (c, b) in edges]
  40.  
  41.         m = int(input())
  42.         visited = [False]*(1<<len(names))
  43.         if solve((1 << len(names)) - 1, 0, triangles, visited):
  44.             print('possible')
  45.         else:
  46.             print('impossible')
  47.  
  48.  
  49. if __name__ == '__main__':
  50.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement