- void find_cycle(){
- color.assign(n, 0); // Directed graph
- visited.assign(n, false); // Undirected graph
- parent.assign(n, -1);
- cycle_start = -1;
- for(int v = 0; v<n; v++){
- if(color[v] == 0 and dfs(v)){
- break;
- }
- }
- if(cycle_start == -1){
- //cout << "Ascyclic Graph"<<endl;
- //cout << -1 << endl;
- cout << "IMPOSSIBLE"<< endl;
- }
- else{
- std::vector<int> cycle;
- cycle.push_back(cycle_start);
- for(int v = cycle_end; v != cycle_start; v = parent[v]){
- cycle.push_back(v);
- }
- cycle.push_back(cycle_start);
- reverse(cycle.begin(), cycle.end());
- // sort(cycle.begin(), cycle.end());
- cout << cycle.size()<< endl;
- for(int v:cycle){
- cout << v+1 <<' ';
- }
-
- }
- }