#include<bits/stdc++.h>
using namespace std;
#define for1(i,m,n) for(int i=m;i<=n;i++)
#define for0(i,m,n) for(int i=m;i<n;i++)
#define int unsigned long long
#define el '\n'
#define fi first
#define se second
#define ii pair<int,int>
#define vll(i) i.begin(),i.end()
#define pb push_back
const int N=5*1e5+1111;
const int mod=1e9+7;
int id=0,id_=0;
int n,m,k,l;
vector<int> v[N],v_[N];
int num[N],a[N],b[N],low[N],color[N],in[N];
// a:tong phan tu;
stack<int>st;
void solve(int u){
num[u]=low[u]=++id;
color[u]=1;
in[u]=1;
st.push(u);
//if(u==8) cout<<"hi"<<el;
for(auto x:v[u]){
if(color[x]==0){
// if(u==8) cout<<"hi"<<x<<' '<<num[x]<<' '<<color[x]<<' '<<low[x]<<el;
solve(x);
low[u]=min(low[u],low[x]);
}
else if(in[x]) {
low[u]=min(low[u],num[x]);
// if(u==8) cout<<"hi"<<x<<' '<<num[x]<<' '<<color[x]<<' '<<low[x]<<el;
}
//num[x]=1;
}
// cout<<"hi"<<u<<' '<<b[u]<<el;
if(num[u]==low[u]){
id_++;
while(st.top()!=u){
v_[id_].pb(st.top());
in[st.top()]=0;
st.pop();
}
v_[id_].pb(u);
in[u]=0;
st.pop();
}
// cout<<a[u]<<' '<<b[u]<<el;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// freopen("bai1.INP","r",stdin);
// freopen("bai1.OUT","w",stdout);
cin>>n>>m;
for1(i,1,m){
int x,y;cin>>x>>y;
v[x].pb(y);
}
for1(i,1,n){
if(color[i]==0){
solve(i);
}
}
cout<<id_<<el;
for1(i,1,id_){
for(auto x:v_[i]){
cout<<x<<' ';
}
cout<<el;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZm9yMShpLG0sbikgZm9yKGludCBpPW07aTw9bjtpKyspCiNkZWZpbmUgZm9yMChpLG0sbikgZm9yKGludCBpPW07aTxuO2krKykKCiNkZWZpbmUgaW50IHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIGVsICdcbicKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSB2bGwoaSkgaS5iZWdpbigpLGkuZW5kKCkKI2RlZmluZSBwYiBwdXNoX2JhY2sKCmNvbnN0IGludCBOPTUqMWU1KzExMTE7CmNvbnN0IGludCBtb2Q9MWU5Kzc7CmludCBpZD0wLGlkXz0wOwppbnQgbixtLGssbDsKdmVjdG9yPGludD4gdltOXSx2X1tOXTsKaW50IG51bVtOXSxhW05dLGJbTl0sbG93W05dLGNvbG9yW05dLGluW05dOwovLyBhOnRvbmcgcGhhbiB0dTsKc3RhY2s8aW50PnN0Owp2b2lkIHNvbHZlKGludCB1KXsKbnVtW3VdPWxvd1t1XT0rK2lkOwpjb2xvclt1XT0xOwppblt1XT0xOwpzdC5wdXNoKHUpOwovL2lmKHU9PTgpIGNvdXQ8PCJoaSI8PGVsOwogICBmb3IoYXV0byB4OnZbdV0pewoKCiAgICAgIGlmKGNvbG9yW3hdPT0wKXsKICAgICAgICAgICAvLyAgIGlmKHU9PTgpIGNvdXQ8PCJoaSI8PHg8PCcgJzw8bnVtW3hdPDwnICc8PGNvbG9yW3hdPDwnICc8PGxvd1t4XTw8ZWw7CiAgICAgICAgc29sdmUoeCk7CiAgICAgICAgbG93W3VdPW1pbihsb3dbdV0sbG93W3hdKTsKICAgICAgICAgICAgICB9CiAgICAgIGVsc2UgaWYoaW5beF0pIHsKICAgICAgICAgICAgbG93W3VdPW1pbihsb3dbdV0sbnVtW3hdKTsKICAgICAgICAgICAvLyBpZih1PT04KSBjb3V0PDwiaGkiPDx4PDwnICc8PG51bVt4XTw8JyAnPDxjb2xvclt4XTw8JyAnPDxsb3dbeF08PGVsOwogICAgICB9CgoKICAgIC8vbnVtW3hdPTE7CgogICB9CgogIC8vIGNvdXQ8PCJoaSI8PHU8PCcgJzw8Ylt1XTw8ZWw7CgogICBpZihudW1bdV09PWxvd1t1XSl7CgogICAgICAgIGlkXysrOwogICAgICAgd2hpbGUoc3QudG9wKCkhPXUpewogICAgICAgIHZfW2lkX10ucGIoc3QudG9wKCkpOwogICAgICAgIGluW3N0LnRvcCgpXT0wOwogICAgICAgIHN0LnBvcCgpOwoKICAgICAgfQogICAgdl9baWRfXS5wYih1KTsKICAgIGluW3VdPTA7CiAgIHN0LnBvcCgpOwogICAgICB9CgogIC8vIGNvdXQ8PGFbdV08PCcgJzw8Ylt1XTw8ZWw7Cn0KCgpzaWduZWQgbWFpbigpewogIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgY2luLnRpZSgwKTsKICBjb3V0LnRpZSgwKTsKICAvLyBmcmVvcGVuKCJiYWkxLklOUCIsInIiLHN0ZGluKTsKICAvLyBmcmVvcGVuKCJiYWkxLk9VVCIsInciLHN0ZG91dCk7CiAgIGNpbj4+bj4+bTsKCgoKICAgZm9yMShpLDEsbSl7CiAgICAgIGludCB4LHk7Y2luPj54Pj55OwogICAgICB2W3hdLnBiKHkpOwogICAgICAgICB9CgoKZm9yMShpLDEsbil7CiBpZihjb2xvcltpXT09MCl7CiAgICBzb2x2ZShpKTsKIH0KfQoKCmNvdXQ8PGlkXzw8ZWw7Cgpmb3IxKGksMSxpZF8pewoKZm9yKGF1dG8geDp2X1tpXSl7CiAgY291dDw8eDw8JyAnOwp9CiAgY291dDw8ZWw7Cn0KICAgIHJldHVybiAwOwp9Cg==