return out
q = Queue()
+q.put(([],tree))
# for i in fences:
# q.put(([i], tree))
-tree[2].remove(3)
-tree[3].remove(2)
-tree[4].remove(5)
-tree[5].remove(4)
-tree[4].remove(7)
-tree[7].remove(4)
+# tree[2].remove(3)
+# tree[3].remove(2)
+# tree[4].remove(5)
+# tree[5].remove(4)
+# tree[4].remove(7)
+# tree[7].remove(4)
-q.put(([(2,3),(4,5),(4,7)], tree))
+# q.put(([(2,3),(4,5),(4,7)], tree))
while not q.empty():
# current is list of fences removed, pen is the resulting tree
current, pen = q.get()
+
+ print("---------------------")
+ print(current, pen)
+
# check if this is solution
# if we form a loop when dfs then that is closed.
# we want maximum 1 (all animals in same pen)
node_loops = dict()
for i in pen.keys():
loops = -1
- q2 = LifoQueue()
+ q2 = Queue()
q2.put((i,set()))
global_seen = set()
while not q2.empty():
c,seen = q2.get()
if c == i:
+ print("bad", loops,c,seen)
loops += 1
+ if loops > 0:
+ continue
# if loops > 1:
# is_solution = False
# break
else:
seen.add(c)
global_seen.add(c)
- print(c, seen)
+ print(c, seen, loops, i)
for j in pen[c]:
q2.put((j,seen.copy()))
# print(c,j,seen, loops)
-
- print(loops)
- quit()
if loops == 0:
broken_out = True
-
- if loops <= 1 and len(global_seen) == len(pen.keys()): # make sure there aren't isolated loops
+ print(loops, len(global_seen),len(pen.keys()))
+ if loops <= 2 and len(global_seen) == len(pen.keys()): # make sure there aren't isolated loops
node_loops[i] = loops
+ else:
+ is_solution = False
+ break
if broken_out:
for i in node_loops.values():
output = 0
for i in current:
output += fences[i]
- print(output, current, node_loops)
- quit()
+ print("!", output, current, node_loops)
# find next
for fence in fences:
new_pen = deep_copy(pen)
new_pen[fence[0]].remove(fence[1])
new_pen[fence[1]].remove(fence[0])
+ print("#", fence, new_pen)
new_current = current[:]
new_current.append(fence)
- q.put((new_current, new_pen))
+ q.put((new_current, deep_copy(new_pen)))
--- /dev/null
+from math import floor
+
+formation = ((1, 0), (2, 0), (3, 0), (2, 1))
+next_formation = ((1, 1), (2, 2), (3, 1))
+
+T = int(input())
+for i in range(T):
+ m, x, y = tuple(map(int, input().split()))
+ close_x = [floor(x / (5 ** mx)) for mx in range(m)][::-1]
+ close_y = [floor(y / (5 ** my)) for my in range(m)][::-1]
+ for mag, mx, my in zip(range(m), close_x, close_y):
+ offset = (mx % 5, my % 5)
+ if offset in formation:
+ print("crystal")
+ break
+ elif offset in next_formation and mag != m - 1:
+ continue
+ else:
+ print("empty")
+ break