#include <fstream>
#include <vector>
#include <iostream>
#define DN 100005
using namespace std;
typedef vector<int>::iterator it;
int n,m,h[DN],lw[DN],viz[DN],sz;
vector<int> gr[DN],st;
vector<vector<int> > r;
void d(int s,int hc) {
h[s]=lw[s]=hc; viz[s]=1;
//cout<<s<<' '<<h[s]<<' '<<lw[s]<<'\n';
st.push_back(s);
for(it i=gr[s].begin(); i!=gr[s].end(); ++i) {
if(!h[*i]) d(*i,hc+1);
if(viz[*i]) lw[s]=min(lw[s],lw[*i]);
}
if(lw[s]==h[s]) {
vector<int> cc;
int tp;
do {
tp=st.back(); st.pop_back();
cc.push_back(tp); viz[tp]=0;
}while(tp!=s);
r.push_back(cc);
}
}
int main() {
ifstream f("ctc.in");
ofstream g("ctc.out");
for(f>>n>>m;m--;) {
int a,b; f>>a>>b;
gr[a].push_back(b);
}
for(int i=1; i<=n; ++i) if(!h[i]) d(i,1);
g<<r.size()<<'\n';
for(int i=0; i<r.size(); ++i) {
for(it j=r[i].begin(); j!=r[i].end(); ++j) g<<*j<<' ';
g<<'\n';
}
}