func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> v[100005];   vector<pair<int, int> > asdf;   int n;   int m;   int cnt[100005];   vector<int> nxt[100005];   void build(int at, int num) {     if (cnt[at] > 2) return;     if (num == m) {       while ((int)asdf.size()) {         printf( %d %d n , 1 + asdf.back().first, 1 + asdf.back().second);         asdf.pop_back();       }       exit(0);     }     if (cnt[at] == 2) return;     int a, b;     if ((int)v[at].size() != 0) {       a = v[at].front();       b = v[at].back();     } else {       a = -1, b = -1;     }     int c, d;     if ((int)nxt[at].size()) {       c = nxt[at].back();       d = nxt[at].front();     } else {       c = d = -1;     }     for (auto(i) = (at + 1); (i) != (n); (i)++) {       if (i != d && i != c && i != a && i != b && cnt[i] < 2) {         asdf.push_back(make_pair(i, at));         cnt[at]++;         cnt[i]++;         nxt[at].push_back(i);         nxt[i].push_back(at);         build(i, num + 1);         nxt[at].pop_back();         nxt[i].pop_back();         cnt[at]--;         cnt[i]--;         asdf.pop_back();       }     }     if (cnt[at] > 0 && cnt[at] < 2) {       c = nxt[at].front();       d = nxt[at].back();       for (auto(i) = (0); (i) != (at); (i)++) {         if (cnt[i] < 2 && i != a && i != b && i != c && i != d) {           asdf.push_back(make_pair(i, at));           cnt[at]++;           cnt[i]++;           nxt[at].push_back(i);           nxt[i].push_back(at);           build(i, num + 1);           nxt[at].pop_back();           nxt[i].pop_back();           cnt[at]--;           cnt[i]--;           asdf.pop_back();         }       }     } else {       c = d = -1;       for (auto(i) = (0); (i) != (at); (i)++) {         if (i != c && i != d && i != a && i != b && cnt[i] < 2) {           asdf.push_back(make_pair(i, at));           cnt[at]++;           cnt[i]++;           nxt[at].push_back(i);           nxt[i].push_back(at);           build(i, num + 1);           nxt[at].pop_back();           nxt[i].pop_back();           cnt[at]--;           cnt[i]--;           asdf.pop_back();         }       }     }   }   int main() {     cin >> n >> m;     for (auto(i) = (0); (i) != (m); (i)++) {       int a, b;       cin >> a >> b;       a--;       b--;       v[a].push_back(b), v[b].push_back(a);     }     int kek = 0;     for (auto(i) = (0); (i) != (n); (i)++)       kek += (min(2, (n - 1 - (int)v[i].size())));     kek /= 2;     if (kek < m) {       puts( -1 );       return 0;     }     for (auto(i) = (0); (i) != (n); (i)++) build(i, 0);     return 0;   }   