def process(self):
color_counter = <NUM_LIT:1>;<EOL>degrees = list();<EOL>saturation_degrees = [<NUM_LIT:0>] * len(self.__data_pointer);<EOL>self.__coloring = [<NUM_LIT:0>] * len(self.__data_pointer);<EOL>uncolored_vertices = set(range(len(self.__data_pointer)));<EOL>index_maximum_degree = <NUM_LIT:0>;<EOL>maximum_degree = <NUM_LIT:0>;<EOL>for index_node in range(len(self.__data_pointer)):<EOL><INDENT>degrees.append( ( sum(self.__data_pointer[index_node]), index_node ) );<EOL>if (degrees[index_node][<NUM_LIT:0>] > maximum_degree):<EOL><INDENT>(maximum_degree, node_index) = degrees[index_node];<EOL>index_maximum_degree = index_node;<EOL><DEDENT><DEDENT>neighbors = self.__get_neighbors(index_maximum_degree);<EOL>for index_neighbor in neighbors:<EOL><INDENT>saturation_degrees[index_neighbor] += <NUM_LIT:1>;<EOL><DEDENT>self.__coloring[index_maximum_degree] = color_counter;<EOL>uncolored_vertices.remove(index_maximum_degree);<EOL>while(len(uncolored_vertices) > <NUM_LIT:0>):<EOL><INDENT>maximum_satur_degree = -<NUM_LIT:1>;<EOL>for index in uncolored_vertices:<EOL><INDENT>if (saturation_degrees[index] > maximum_satur_degree):<EOL><INDENT>maximum_satur_degree = saturation_degrees[index];<EOL><DEDENT><DEDENT>indexes_maximum_satur_degree = [index for index in uncolored_vertices if saturation_degrees[index] == maximum_satur_degree];           <EOL>coloring_index = indexes_maximum_satur_degree[<NUM_LIT:0>];<EOL>if (len(indexes_maximum_satur_degree) > <NUM_LIT:1>): <EOL><INDENT>maximum_degree = -<NUM_LIT:1>;<EOL>for index in indexes_maximum_satur_degree:<EOL><INDENT>(degree, node_index) = degrees[index];<EOL>if (degree > maximum_degree):<EOL><INDENT>coloring_index = node_index;<EOL>maximum_degree = degree;<EOL><DEDENT><DEDENT><DEDENT>node_index_neighbors = self.__get_neighbors(coloring_index);<EOL>for number_color in range(<NUM_LIT:1>, color_counter + <NUM_LIT:1>, <NUM_LIT:1>):<EOL><INDENT>if (self.__get_amount_color(node_index_neighbors, number_color) == <NUM_LIT:0>):<EOL><INDENT>self.__coloring[coloring_index] = number_color;<EOL>break;<EOL><DEDENT><DEDENT>if (self.__coloring[coloring_index] == <NUM_LIT:0>):<EOL><INDENT>color_counter += <NUM_LIT:1>;     <EOL>self.__coloring[coloring_index] = color_counter;<EOL><DEDENT>uncolored_vertices.remove(coloring_index);<EOL>for index_neighbor in node_index_neighbors:<EOL><INDENT>subneighbors = self.__get_neighbors(index_neighbor);<EOL>if (self.__get_amount_color(subneighbors, self.__coloring[coloring_index]) == <NUM_LIT:1>):<EOL><INDENT>saturation_degrees[index_neighbor] += <NUM_LIT:1>;<EOL><DEDENT><DEDENT><DEDENT>
!
        @brief Perform graph coloring using DSATUR algorithm.

        @see get_colors()