func_code_string: #include <bits/stdc++.h>   const long long MAX_N = 3e5 + 10;   const long long MOD = 1e9 + 9;   using namespace std;   vector<int> g1[MAX_N];   vector<int> g[MAX_N];   vector<int> current;   int p[MAX_N];   int mark[MAX_N];   int d[MAX_N];   int h[MAX_N];   int n, m, k;   void rt(int v) {     mark[v]++;     for (auto x : g1[v]) {       if (!mark[x]) {         p[x] = v;         h[x] = h[v] + 1;         g[x].push_back(v);         g[v].push_back(x);         rt(x);       }     }   }   void solve() {     cout <<  CYCLES n ;     int ct = 0;     for (int i = 2; i <= n; ++i) {       int v = i;       if (g[v].size() > 1) continue;       ct++;       pair<int, int> pr;       int res = 1e9;       vector<pair<int, int>> vc;       for (auto x : g1[v]) {         if (x == p[v]) continue;         if ((h[v] - h[x]) % 3 != 2 and h[v] - h[x] + 1 < res) {           res = h[v] - h[x] + 1;           pr.second = v;           pr.first = x;         }         vc.push_back({h[x], x});       }       sort(vc.begin(), vc.end());       for (int i = 0; i < vc.size() - 1; ++i) {         int len = vc[i + 1].first - vc[i].first + 2;         if (len % 3 and res > len) {           res = len;           pr = {vc[i].second, vc[i + 1].second};         }       }       int now = pr.second;       cout << res <<   n ;       if (pr.second != v) cout << v <<   n ;       while (1) {         cout << now <<    ;         if (now == pr.first) break;         now = p[now];       }       cout <<   n ;       if (ct == k) exit(0);     }     exit(0);   }   void dfs(int v, int f) {     for (auto x : g[v]) {       if (x != f) {         d[x] = d[v] + 1;         dfs(x, v);       }     }   }   void sfd(int v, int f, int dest) {     current.push_back(v);     if (v == dest) {       cout << current.size() <<   n ;       for (auto x : current) cout << x <<    ;       exit(0);     }     for (auto x : g[v]) {       if (x != f) sfd(x, v, dest);     }     current.pop_back();   }   int main() {     cin >> n >> m >> k;     if (n == 1) return cout <<  PATH n1 n1 , 0;     if (n == 2) return cout <<  PATH n2 n1 2 , 0;     for (int i = 0; i < m; ++i) {       int u, v;       scanf( %d%d , &v, &u);       g1[u].push_back(v);       g1[v].push_back(u);     }     rt(1);     int now = 0, v = 1;     for (int i = 1; i <= n; ++i) {       if (h[i] > now) {         now = h[i];         v = i;       }     }     dfs(v, 0);     now = 0;     int best = 0;     for (int i = 1; i <= n; ++i) {       if (d[i] > now) {         now = d[i];         best = i;       }     }     if (n / (double)k <= now) {       cout <<  PATH n ;       sfd(v, 0, best);     } else       solve();     return 0;   }   