#include #include #include #include using namespace std; #ifdef DBG #define PDBG(X) { cout< > Adj; Adj Graph; map NodeIndex; set Visited; int NodeLen, root, steps, maxVal; void findMax (int parent, int child) { set::iterator iter; PDBG("Parent :"<::iterator iter= Graph[child].begin(); iter!= Graph[child].end(); iter++) { steps++; findMax(child, *iter); steps--; } Visited.erase(child); } int main() { int n; cin>>n; NodeLen = 1; for (int i=0; i>lhs>>rhs; if ( (li = NodeIndex[lhs]) == 0) li = (NodeIndex[lhs] = NodeLen++); if ( (ri = NodeIndex[rhs]) == 0) ri = (NodeIndex[rhs] = NodeLen++); Graph[li].insert(ri); } maxVal = 0; for (root = 1; root < NodeLen; root++) { steps = 1; if(Graph[root].find(root) != Graph[root].end()) continue; Visited.insert (root); PDBG("Root :"<::iterator iter = Graph[root].begin(); iter != Graph[root].end(); iter++) { findMax(root, *iter); } Visited.erase(root); } if(maxVal>2) cout<