#include<stdio.h>
#include<stdlib.h>
#define N 100001
#define M 200001
typedef struct stack
{long st[N],sp;};
stack s;
long n,m,a[M],b[M],deg[N]={0},*g[N],k,i,j,t,index=0,d[100][10000],c[N]={0},l[N],e[N],nr;
void push(stack &s,long x)
{s.st[++s.sp]=x;}
long pop(stack &s)
{return s.st[s.sp--];}
int apartine(stack &s,long x)
{long i;
for(i=1;i<=s.sp;i++)
if(s.st[i]==x)
return 1;
return 0;}
void tarjan(long *index,long i,long *nr,stack &s)
{long k,j;
if(apartine(s,i)==0)
push(s,i);
c[i]=(*index);
l[i]=(*index)++;
for(j=0;j<deg[i];j++)
if(c[g[i][j]]==0)
{tarjan(index,g[i][j],nr,s);
if(l[i]>l[g[i][j]])
l[i]=l[g[i][j]];}
else
if(apartine(s,g[i][j])==1&&l[i]>c[g[i][j]])
l[i]=c[g[i][j]];
if(c[i]==l[i])
{(*nr)++;
k=0;
while(s.sp!=0)
d[(*nr)][++k]=pop(s);
e[(*nr)]=k;}}
int main()
{freopen("ctc.in","r",stdin);
freopen("ctc.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(k=1;k<=m;k++)
{scanf("%ld%ld",&a[k],&b[k]);
deg[b[k]]++;}
for(i=1;i<=n;i++)
{g[i]=(long*)malloc(deg[i]*sizeof(long));
deg[i]=0;}
for(j=1;j<=m;j++)
g[b[j]][deg[b[j]]++]=a[j];
index=0;
nr=0;
for(i=1;i<=n;i++)
if(c[i]==0)
{s.sp=0;
tarjan(&index,i,&nr,s);}
printf("%ld\n",nr);
for(j=1;j<=nr;j++)
{for(k=e[j];k>=1;k--)
printf("%ld ",d[j][k]);
printf("\n");}
fclose(stdin);
fclose(stdout);
return 0;}