rt,0pts
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=500005;
int n,m,u,v,low[N],dfn[N],idx,num;
vector<int>to[N],fl[N];
stack<int>st;
void tarjan(int id)
{
low[id]=dfn[id]=++idx;
st.push(id);
if(to[id].size()==0)fl[++num].push_back(id);
for(int i=0;i<to[id].size();i++)
{
int t=to[id][i];
if(!dfn[t])
{
tarjan(t);
low[id]=min(low[id],low[t]);
if(low[t]>=dfn[id])
{
num++;
while(st.top()!=id)
fl[num].push_back(st.top()),st.pop();
fl[num].push_back(id);
}
}
else low[id]=min(low[id],dfn[t]);
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
if(u!=v)to[u].push_back(v),to[v].push_back(u);
}
for(int i=1;i<=n;i++)
if(!dfn[i])tarjan(i);
printf("%d",num);
for(int i=1;i<=num;i++)
{
printf("\n%d",fl[i].size());
for(int j=0;j<fl[i].size();j++)printf(" %d",fl[i][j]);
}
return 0;
}