#include #include #include #include #include #include #include #include #include using namespace std; int checkNode(int nodeNum, int lastColor, vector * vertColor, vector< vector > * biGraph) { int i = 0, returnValue = 0; if(lastColor == 2){ (*vertColor)[nodeNum] = 1; } else { (*vertColor)[nodeNum] = 2; } for(i = 0; i < (*vertColor).size(); i++) { if(returnValue > 0){ break; } if((*biGraph)[nodeNum][i] == 1 && (*vertColor)[i] == 0) { returnValue += checkNode(i, (*vertColor)[nodeNum], vertColor, biGraph); } else if((*biGraph)[nodeNum][i] == 1 && (*vertColor)[i] == lastColor){ returnValue += 0; } else if((*biGraph)[nodeNum][i] == 1 && (*vertColor)[i] == (*vertColor)[nodeNum]){ return 1; } else if((*biGraph)[nodeNum][i] == 0){ returnValue += 0; } } return returnValue; } int main() { int i, j, startVert, curVert, biNotBi; int numVert, numEdges, vert1, vert2; vector< vector< int > > biGraph; vector tempVec; vector vertColor; //0 = uncolored, 1 = black, 2 = red while(1) { cin >> numVert; if(numVert == 0){ break; } cin >> numEdges; for(i = 0; i < numVert; i++) { for(j = 0; j < numVert; j++) { tempVec.push_back(0); } biGraph.push_back(tempVec); vertColor.push_back(0); tempVec.clear(); } for(i = 0; i < numEdges; i++) { cin >> vert1 >> vert2; biGraph[vert1][vert2] = 1; biGraph[vert2][vert1] = 1; } biNotBi = checkNode(0, 2, &vertColor, &biGraph); if(biNotBi != 0){ cout << "NOT BICOLORABLE" << endl; } else { cout << "BICOLORABLE" << endl; } biNotBi = 0; biGraph.clear(); vertColor.clear(); } return 0; }