#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> g(250010, vector<int>());
int n, k, len;
bool used[250010] = {};
vector<vector<int>> tree(250010, vector<int>());
void build_tree(int k) {
  used[k] = 1;
  for (int i = 0; i < g[k].size(); i++)
    if (!used[g[k][i]]) {
      tree[k].push_back(g[k][i]);
      tree[g[k][i]].push_back(k);
      build_tree(g[k][i]);
    }
}
int parent[250010] = {};
void go(int k, int depth) {
  if (depth >= len) {
    cout << "PATH\n";
    vector<int> p;
    do {
      p.push_back(k);
      k = parent[k];
    } while (k);
    cout << p.size() << endl;
    for (int i = 0; i < p.size(); i++) cout << p[i] << " ";
    exit(0);
  }
  used[k] = 1;
  for (int i = 0; i < tree[k].size(); i++)
    if (!used[tree[k][i]]) {
      parent[tree[k][i]] = k;
      go(tree[k][i], depth + 1);
    }
}
int main() {
  int m;
  cin >> n >> m >> k;
  int u, v;
  for (int i = 0; i < m; i++) {
    scanf(" %d %d", &u, &v);
    g[v].push_back(u);
    g[u].push_back(v);
  }
  len = ceil(1.0 * n / k);
  build_tree(1);
  for (int i = 1; i <= n; i++) used[i] = 0;
  go(1, 1);
  vector<int> leaf;
  for (int i = 1; i <= n; i++)
    if (tree[i].size() == 1) leaf.push_back(i);
  cout << "CYCLES\n";
  int count = k;
  for (int i = 0; i < leaf.size() && count; i++) {
    int x = 0, y = 0;
    for (int j = 0; j < g[leaf[i]].size(); j++)
      if (g[leaf[i]][j] != tree[leaf[i]][0]) {
        if (!x)
          x = g[leaf[i]][j];
        else if (!y)
          y = g[leaf[i]][j];
        else
          break;
      }
    vector<int> pathToX;
    vector<int> path;
    bool r = false;
    int k = leaf[i];
    do {
      pathToX.push_back(k);
      if (k == y) r = true;
      if (r) path.push_back(k);
      k = parent[k];
    } while (k != x && k);
    pathToX.push_back(k);
    if (r) path.push_back(k);
    if (pathToX.size() % 3 && pathToX.size() > 3) {
      cout << pathToX.size() << endl;
      count--;
      for (int t = 0; t < pathToX.size(); t++) printf("%d ", pathToX[t]);
      printf("\n");
      continue;
    }
    vector<int> pathToY;
    r = false;
    k = leaf[i];
    do {
      pathToY.push_back(k);
      if (k == x) r = true;
      if (r) path.push_back(k);
      k = parent[k];
    } while (k != y && k);
    pathToY.push_back(k);
    if (r) path.push_back(k);
    path.push_back(leaf[i]);
    if (pathToY.size() % 3 && pathToY.size() > 3) {
      cout << pathToY.size() << endl;
      count--;
      for (int t = 0; t < pathToY.size(); t++) printf("%d ", pathToY[t]);
      printf("\n");
      continue;
    }
    if (path.size() > 3) {
      cout << path.size() << endl;
      count--;
      for (int t = 0; t < path.size(); t++) printf("%d ", path[t]);
      printf("\n");
    }
  }
  return 0;
}
