#include <cstdio>
#include <vector>
#define nmax 100001
using namespace std;
typedef vector <int> A[nmax];
A a1,a2,v;
typedef bool VIZ[nmax];
VIZ viz,viz1,viz2;
unsigned int n,m,x,y,i,j,nr;
void citire()
{
freopen("ctc.in","r",stdin);
freopen("ctc.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
a1[x].push_back(y);
a2[y].push_back(x);
}
}
void dfs(int i, A a, VIZ Viz)
{
Viz[i]=1;
for(unsigned int j=0;j<a[i].size();j++)
if(!Viz[a[i][j]]) dfs(a[i][j],a,Viz);
}
int main()
{
citire();
for(i=1;i<=n;i++)
{
if (!viz[i])
{
dfs(i,a1,viz1);
dfs(i,a2,viz2);
nr++;
for(j=1;j<=n;j++)
{
if (viz1[j]&&viz2[j])
viz[j]=1, v[nr].push_back(j);
viz1[j]=0;
viz2[j]=0;
}
}
}
printf("%d\n",nr);
for(i=1;i<=nr;i++)
{
for(j=0;j<v[i].size();j++)
printf("%d ",v[i][j]);
printf("\n");
}
return 0;
}