The Vertex Coloring Problem and Its Generalizations