WA了#4#5#8#11#13#22
#include<bits/stdc++.h>
using namespace std;
const int N=4e6+5;
int ne[N],to[N],he[N],df[N],ba[N],fr[N],st[N];//next,to,head,dfs,back,from,stack
bool v[N];
vector<int>bc[N];//Biconnected_Component
int ti=0,bc_num=0,st_num=0;//time,Biconnected_Component_num,stack_num
void dfs(int u,int fa=0){
df[u]=ba[u]=++ti;
st[++st_num]=u;
for(int i=he[u];i;i=ne[i]){
int t=to[i];
if(!df[t]){
dfs(t,u);
ba[u]=min(ba[u],ba[t]);
}else if(t!=fa&&df[t]<df[u])ba[u]=min(ba[u],df[t]);
}
if(ba[u]==df[u]){
bc_num++;
while(st_num){
int i=st[st_num--];
bc[bc_num].push_back(i);
if(i==u)break;
}
}
return ;
}
void cha(int f,int t,int n){//from,to,num
ne[n]=he[f];
fr[n]=f;
to[n]=t;
he[f]=n;
return ;
}
/*
P8436_4.in
5 7
4 2
5 4
4 2
3 2
1 2
1 1
2 1
P8436_4.out
3
1 3
1 5
3 1 2 4
*/
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
if(a==b)continue;
cha(a,b,i);
cha(b,a,i+m);
}
int allow_num=0;
for(int i=1;i<=n;i++)if(!he[i])allow_num++;
for(int i=1;i<=n;i++)if(!df[i]&&he[i])dfs(i);
cout<<bc_num+allow_num<<"\n";
for(int i=1;i<=n;i++)if(!he[i])cout<<"1 "<<i<<"\n";
for(int i=1;i<=bc_num;i++){
cout<<bc[i].size()<<" ";
for(int j=0;j<bc[i].size();j++)cout<<bc[i][j]<<" ";
cout<<"\n";
}
return 0;
}