func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 250005;   int n, m, k, dep[maxn], fa[maxn];   bool leaf[maxn], vis[maxn];   vector<int> e[maxn];   void dfs(int p) {     leaf[p] = vis[p] = 1;     for (int i = 0, v; i < e[p].size(); ++i) {       if (vis[v = e[p][i]]) continue;       leaf[p] = 0;       dep[v] = dep[p] + 1;       fa[v] = p;       dfs(v);     }   }   int main() {     scanf( %d%d%d , &n, &m, &k);     for (int i = 1, u, v; i <= m; ++i) {       scanf( %d%d , &u, &v);       e[u].push_back(v), e[v].push_back(u);     }     dep[1] = 1, dfs(1);     int tmp = (n + k - 1) / k;     for (int i = 1; i <= n; ++i) {       if (dep[i] >= tmp) {         printf( PATH n );         printf( %d n , dep[i]);         while (i) {           printf( %d  , i);           i = fa[i];         }         return 0;       }     }     printf( CYCLES n );     vector<int> pos;     for (int i = 1; i <= n && pos.size() < k; ++i)       if (leaf[i]) pos.push_back(i);     for (int i = 1; i <= k; ++i) {       bool f = 0;       int p = pos[i - 1];       for (int j = 0, v; j < e[p].size(); ++j) {         v = e[p][j];         if (v != fa[p] && (dep[p] - dep[v] + 1) % 3) {           printf( %d n , dep[p] - dep[v] + 1);           f = 1;           while (fa[p] != fa[v]) {             printf( %d  , p);             p = fa[p];           }           printf( %d n , p);           break;         }       }       if (f) continue;       vector<int> bad;       for (int j = 0, v; j < e[p].size() && bad.size() < 2; ++j)         if ((v = e[p][j]) != fa[p]) bad.push_back(v);       int x = bad[0], y = bad[1];       if (dep[x] > dep[y]) swap(x, y);       printf( %d n , dep[y] - dep[x] + 2);       printf( %d  , p);       while (fa[x] != fa[y]) {         printf( %d  , y);         y = fa[y];       }       printf( %d n , y);     }     return 0;   }   