def build_potential_graphs(cycle_mapping):
  graphs = {}
  base_decider = InequalityDecider()
  base_decider.add_cycle_mapping(problem_def, cycle_mapping)
  decider = base_decider.freeze()
  for result, inputs in problem_def.iteritems():
    my_cycles    = tuple(map(operator.itemgetter(1), filter(lambda a: a[0]==result, cycle_mapping)))
    other_cycles = map(operator.itemgetter(1), filter(lambda a: a[0]!=result, cycle_mapping))

    all_states   = set(map(lambda s: string.join(s, ""), itertools.permutations(["a","a","b","b","c"])))
    other_states = all_states-set(itertools.chain(*my_cycles))
    for input in inputs:
      graphs[input] = (decider.build_transition_graph(my_cycles, other_states, input), my_cycles[0][0])
  return graphs
def build_decider(prefix):
  basedecider = InequalityDecider()
  basedecider.add_cycle_mapping(problem_def, cycle_mapping)
  for transition in prefix:
    basedecider.add_transition(*transition)
  return basedecider.freeze()