rt.
#include<bits/stdc++.h>
#define Code using
#define by namespace
#define wjb std
Code by wjb;
int in()
{
int k=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
return k*f;
}
void out(int x)
{
if(x<0)putchar('-'),x=-x;
if(x<10)putchar(x+'0');
else out(x/10),putchar(x%10+'0');
}
const int N=5e5+10;
vector<int>e[N];
int fa[N],dep[N];
int pos=0;
vector<int>leaf;
void find(int u,int f,int d)
{
dep[u]=d,fa[u]=f;
if(d>dep[pos])pos=u;
bool flag=0;
for(int v:e[u])
if(!dep[v])flag=true,find(v,u,d+1);
if(!flag)leaf.push_back(u);
}
void print(int u,int x,int op=0)
{
if(dep[u]<dep[x])swap(u,x);
out(dep[u]-dep[x]+1+(op!=0)),putchar('\n');
if(op)out(op),putchar(' ');
for(;u!=fa[x];u=fa[u])out(u),putchar(' ');
putchar('\n');
}
int main()
{
int n=in(),m=in(),k=in();
while(m--)
{
int u=in(),v=in();
e[u].push_back(v),e[v].push_back(u);
}
find(1,0,1);
int root=pos;
memset(fa,0,sizeof(fa)),memset(dep,0,sizeof(dep));
pos=0,find(root,0,1);
if(dep[pos]>=ceil(n*1.0/k))puts("PATH"),print(pos,root);
else if(leaf.size()<k)puts("-1");
else
{
puts("CYCLES");
for(int i=0;i<k;i++)
{
int u=leaf[i],x=e[u][0],y=e[u][1];
if(x==fa[u])x=e[u][2];
if(y==fa[u])y=e[u][2];
if((dep[u]-dep[x]+1)%3!=0)print(u,x);
else if((dep[u]-dep[y]+1)%3!=0)print(u,y);
else print(x,y,u);
}
}
return 0;
}