func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e6 + 5;   int n, m;   namespace BCC {   const int N = 202020;   vector<int> bcc[N];   vector<int> k;   int cnt, dfn[N], low[N], id[N], st[N], _st, _, to[N];   void dfs(int c, int dep, vector<int> g[]) {     int cc = 0;     st[_st++] = c;     dfn[c] = low[c] = dep;     for (auto t : g[c]) {       if (!dfn[t]) {         dfs(t, dep + 1, g);         low[c] = min(low[c], low[t]);       } else if (dfn[t] != dfn[c] - 1 || cc++)         low[c] = min(low[c], dfn[t]);     }     if (low[c] == dfn[c]) {       to[_] = st[_st - 1];       do {         id[st[--_st]] = _;       } while (st[_st] != c);       _++;     }   }   int solve(int n, vector<int> g[]) {     cnt = 0;     fill_n(dfn, n, _ = 0);     fill_n(low, n, _st = 0);     fill_n(bcc, n, vector<int>());     for (int i = (0); i < (n); i++)       if (!dfn[i]) dfs(i, 1, g), cnt++;     for (int i = (0); i < (n); i++)       for (auto j : g[i])         if (id[i] != id[j]) bcc[id[i]].push_back(id[j]);     return cnt;   }   }  // namespace BCC   vector<int> g[N];   int main() {     cin >> n >> m;     if (n == 2) {       cout << -1;       return 0;     }     for (int i = (1); i < (m + 1); i++) {       int u, v;       cin >> u >> v;       u--, v--;       g[u].push_back(v);       g[v].push_back(u);     }     BCC::solve(n, g);     int leaf = 0;     vector<int> s;     for (int i = (0); i < (BCC::_); i++) {       if ((int)BCC::bcc[i].size() == 1) leaf++, s.push_back(BCC::to[i] + 1);     }     int ans = (leaf + 1) / 2;     cout << ans <<   n ;     if (leaf & 1) ans--;     for (int i = ans; i <= leaf - 1; ++i)       cout << s[i] <<     << s[i - ans] <<   n ;     return 0;   }   