#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 1;
int n, k, m, a, b, u;
int t[N];
vector<int> v1[N];
vector<int> v[N];
vector<int> w[N];
bool odw[N];
int o[N];
int xd = -1;
int dd;
int dist[N];
vector<int> leafs;
void dfs1(int a, int d, int oj) {
  odw[a] = true;
  for (int i = 0; i < v1[a].size(); i++) {
    u = v1[a][i];
    if (!odw[u]) {
      o[u] = a;
      v[a].push_back(u);
      dfs1(u, d + 1, a);
    } else {
      if (u != a) w[u].push_back(a);
    }
  }
  if (d >= n / k + int(n % k == 0) && xd == -1) {
    xd = a;
    dd = d;
  }
}
void dfs(int a) {
  for (int i = 0; i < v[a].size(); i++) {
    u = v[a][i];
    dist[u] = dist[a] + 1;
    dfs(u);
  }
  if (v[a].size() == 0) leafs.push_back(a);
}
int main() {
  std::ios_base::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    cin >> a >> b;
    v1[a].push_back(b);
    v1[b].push_back(a);
  }
  dfs1(1, 1, -1);
  if (xd != -1) {
    cout << "PATH\n";
    cout << dd << "\n";
    vector<int> ans;
    while (xd != 1) {
      ans.push_back(xd);
      xd = o[xd];
    }
    cout << 1 << " ";
    for (int i = ans.size() - 1; i >= 0; i--) cout << ans[i] << " ";
    return 0;
  }
  dfs(1);
  dist[1] = 0;
  cout << "CYCLES\n";
  for (int id = 0; id < k; id++) {
    int l = leafs[id], x = w[l][0], y = w[l][1];
    if ((dist[l] - dist[x] + 1) % 3 != 0) {
      cout << dist[l] - dist[x] + 1 << "\n";
      while (l != x) {
        cout << l << " ";
        l = o[l];
      }
      cout << x << "\n";
    } else if ((dist[l] - dist[y] + 1) % 3 != 0) {
      cout << dist[l] - dist[y] + 1 << "\n";
      while (l != y) {
        cout << l << " ";
        l = o[l];
      }
      cout << y << "\n";
    } else {
      if (dist[x] < dist[y]) swap(x, y);
      cout << dist[x] - dist[y] + 2 << "\n";
      cout << l << " ";
      while (x != y) {
        cout << x << " ";
        x = o[x];
      }
      cout << y << "\n";
    }
  }
}
