#include #include #include #include #include using namespace std; map used; map < string , map > nodes; vector groups; void findgroups(string node,int level) { if (!used[node]) { if (level == 0 ) groups.push_back(""); used[node] = 1; groups.back() += node; map ::iterator jt; for (jt = nodes[node].begin(); jt != nodes[node].end() ; jt++) { findgroups(jt->first,level+1); } } } int main() { int n; cin >> n; string src, ref; for (int i = 0 ; i < n ; i++) { cin >> src >> ref; used[src] = used[ref] = 0; nodes[src][ref] = nodes[ref][src] = 1; } map < string , int >::iterator nk; for (nk = used.begin() ; nk != used.end(); nk++) { findgroups(nk->first,0); } vector ::iterator git; sort(groups.begin(),groups.end()); for (git = groups.begin(); git != groups.end(); git++) { sort(git->begin(),git->end()); cout << *git << endl; } // system("pause"); return 0; }