# # D: A->A
# # A: A->B
# # B: B->A
# # D: B->B
# def maxlen():
# def callback(state):
# A, B, C, D = 1, 1, 1, 1
# if not state.size:
# return [([1, 0, 0], 1)]
# x, y, z = state
# max_y, max_z = 2, 6
# absorb = (0, max_y, max_z)
# # absorb = (0, 0, 0)
# if np.all(state == absorb):
# return []
# trash1, trash2 = (-1, -1, -1), (-2, -2, -2)
# # trash1, trash2 = (0, 0, 0), (0, 0, 0)
# if np.all(state == trash1):
# return [(trash2, 1)]
# if np.all(state == trash2):
# return [(trash1, 1)]
# if z+1 == max_z:
# return [(absorb, 1)]
# if y == 0:
# return [((x, y, z+1), C/(B+C)),
# ((x, y+1, z+1), A/(A+D))]
# if y == max_y:
# return [(trash1, D/(A+D)), # trash
# ((y, 0, z+1), B/(B+C))]
# return [((x, y+1, z+1), D/(A+D)),
# ((y, 0, z+1), B/(B+C))]
# graph = Graph(callback)
# return graph
# graph = maxlen()
# graph.plot(rainbow=True, ranksep=1, nodesep=0.3, size=(10, 10))