public enum Colors {
White,
Gray,
Black
}
public bool HasCycle(int[][] graph, int start, Colors[] colors) {
if(colors[start] == Colors.Gray) return true;
if(colors[start] == Colors.Black) return false;
colors[start] = Colors.Gray;
foreach(var neighbor in graph[start]) {
if(HasCycle(graph, neighbor, colors))
return true;
}
colors[start] = Colors.Black;
return false;
}