func_code_string: #include <bits/stdc++.h>   using namespace std;   int dx[4] = {-1, 1, 0, 0};   int dy[4] = {0, 0, -1, 1};   const int inf = 0x7f7f7f7f;   const int mod = 1000000007;   const double eps = 1e-8;   int n, m;   set<int> v;   vector<pair<int, int> > ans;   vector<int> vc[100007];   bool isok(int u, int v) {     for (size_t i = 0; i < vc[u].size(); ++i) {       if (vc[u][i] == v) return false;     }     return true;   }   bool dfs(int u) {     if ((int)ans.size() == min(n - 1, m)) return true;     v.erase(u);     for (set<int>::iterator it = v.begin(); it != v.end(); ++it) {       if (!isok(u, *it)) continue;       ans.push_back(make_pair(u, *it));       if (dfs(*it))         return true;       else {         ans.pop_back();         it = v.find(*it);       }     }     v.insert(u);     return false;   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 0; i <= n; ++i) vc[i].clear();     int x, y;     for (int i = 0; i < m; ++i) {       scanf( %d%d , &x, &y);       vc[x].push_back(y);       vc[y].push_back(x);     }     for (int i = 1; i <= n; ++i) v.insert(i);     ans.clear();     for (int i = 1; i <= n; ++i) {       if (dfs(i)) {         if (m == n) ans.push_back(make_pair(ans[0].first, ans.back().second));         for (int i = 0; i < m; ++i)           printf( %d %d n , ans[i].first, ans[i].second);         return 0;       }     }     printf( -1 n );     return 0;   }   