if i % total_slices == my_slice:
    clique        = cliques[i]
    print "starting %d %s"%(i, str(clique))
    cycle_mapping = map(lambda c: (c[0], tuple(cycles[c[1]])), clique)
    decider = InequalityDecider()
    decider.add_cycle_mapping(problem_def, cycle_mapping)
    if decider.satisfiable():
      print " satisfiable"
      graphs      = build_potential_graphs(cycle_mapping)

      good_states = list()
      for state in set(map(lambda s: string.join(s, ""), itertools.permutations(["a","a","b","b","c"]))):
        try:
          decider = InequalityDecider()
          decider.add_cycle_mapping(problem_def, cycle_mapping)
          for input, graph_plus in graphs.iteritems():
            path = nx.shortest_path(graph_plus[0], state, graph_plus[1])
            for f, t in zip(path[:-1], path[1:]):
              decider.add_transition(f, t, input)

          if decider.satisfiable():
            good_states.append(state)
        except nx.exception.NetworkXNoPath:
          pass
      if len(good_states) > 0:
        print " have one"
        result.append( (clique, good_states) )

with open("%s/initializable_cliques/%d/%d.pickle"%(basedir, clique_size, my_slice), "w") as f:
  pickle.dump(result, f)
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()