func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   vector<int> edge[110000];   vector<pair<int, int> > R;   set<int> N;   int find(int rt, int to) {     int i;     for (i = 0; i < edge[rt].size(); i++) {       if (edge[rt][i] == to) return 1;     }     return 0;   }   int dfs(int rt) {     if (R.size() == m || R.size() == n - 1) return 1;     N.erase(rt);     set<int>::iterator it;     for (it = N.begin(); it != N.end(); it++) {       if (find(rt, *it)) continue;       R.push_back(make_pair(rt, *it));       if (dfs(*it)) return 1;       R.pop_back();       it = N.find(*it);     }     N.insert(rt);     return 0;   }   int main() {     int a, b, i;     scanf( %d%d , &n, &m);     for (i = 1; i <= m; i++) {       scanf( %d%d , &a, &b);       edge[a].push_back(b);       edge[b].push_back(a);     }     for (i = 1; i <= n; i++) {       N.insert(i);     }     for (i = 1; i <= n; i++) {       if (dfs(i)) {         if (n == m) R.push_back(make_pair(R[0].first, R[R.size() - 1].second));         for (i = 0; i < m; i++) printf( %d %d n , R[i].first, R[i].second);         return 0;       }     }     puts( -1 );     return 0;   }   