A three coloring of a graph labels each vertex v with one of three colors, say R, B or G, so that the two endpoints of any edge have different colors. Consider an undirected graph which is a single path, i.e., where the vertices are v_1...v_n, and there is an edge between each v_i and V_i+1 for i = 1..n - 1. How many 3 colorings does this graph have? (2 points correct answer, 1 point short explanation). How many bits are required to describe such a 3-coloring? (2 points correct answer, 1 point short explanation) Give coding and decoding algorithms that given the 3-coloring, outputs a string of the length above that codes it, and given the code, outputs the original 3-coloring. (3 points algorithm description, 1 point short explanation) Solution program : #include<stdio.h> int G[50][50],x[50]; //G:adjacency matrix,x:colors void next_color(int k){ int i,j; x[k]=1; //coloring vertex with color1 for(i=0;i<k;i++){ //checking all k-1 vertices-backtracking if(G[i][k]!=0 && x[k]==x[i]) //if connected and has same color x[k]=x[i]+1; //assign higher color than x[i] } } int main(){ int n,e,i,j,k,l; printf(\"Enter no. of vertices in the graph: \"); scanf(\"%d\",&n); //total number of vertices in the graph printf(\"Enter no. of edges in the graph : \"); scanf(\"%d\",&e); //total edges in the graph for(i=0;i<n;i++) for(j=0;j<n;j++) G[i][j]=0; //assign 0 to all index of adjacency matrix initially printf(\"enter with which vertices there is an edge 1-->\ \"); for(i=0;i<e;i++){ scanf(\"%d %d\",&k,&l); G[k][l]=1; G[l][k]=1; } for(i=0;i<n;i++) next_color(i); //coloring each vertex printf(\"Colors of vertices -->\ \"); for(i=0;i<n;i++) //displaying color of each vertex printf(\"Vertex[%d] : %d\ \",i+1,x[i]); return 0; } .