static bool IsChoosable(this IGraph_long graph, long[] colorGraph, long liveVertexBits, int c) { graph.BeGreedy(colorGraph, ref liveVertexBits, c); if (liveVertexBits == 0) { return(true); } if ((liveVertexBits & ~colorGraph.Or(c)) != 0) { return(false); } var choosable = false; var V = colorGraph[c] & liveVertexBits; foreach (var C in graph.MaximalIndependentSubsets(V)) { if (graph.IsChoosable(colorGraph, liveVertexBits ^ C, c + 1)) { choosable = true; break; } } return(choosable); }