#include <fstream>
using namespace std;
ifstream cin ("ctc.in");
ofstream cout ("ctc.out");
struct muchie {
int s,d;
}m[200002];
int *v[100002],*c[100002];
int nr[100002],q[100002],levmin[100002];
char u[100002];
int lev=1,ctc,p;
void afis(int x) {
++ctc;
int u=p;
for(;q[p]!=x; --p);
c[ctc]=new int[u-p+2];
int i;
for(i=0;i<=u-p;++i) {
c[ctc][i]=q[p+i];
levmin[q[p+i]]=0;
}
--p;
c[ctc][i]=0;
}
void tarjan(int x) {
u[x]=1;
q[++p]=x;
int levc=lev;
levmin[x]=lev;
++lev;
for (int i=1; i<=nr[x]; ++i) {
if (!u[v[x][i]]) tarjan(v[x][i]);
if (levmin[v[x][i]] && levmin[v[x][i]]<levmin[x]) levmin[x]=levmin[v[x][i]];
}
if (levc==levmin[x]) afis(x);
}
int main() {
int n,muchii;
cin>>n>>muchii;
for (int i=0; i<muchii; ++i) {
cin>>m[i].s>>m[i].d;
++nr[m[i].s];
}
for (int i=1; i<=n; ++i) {
v[i]=new int[nr[i]+1];
v[i][0]=0;
}
for (int i=0; i<muchii; ++i) {
v[m[i].s][++v[m[i].s][0]]=m[i].d;
}
for (int i=1; i<=n; ++i) {
if (!u[i]) tarjan(i);
}
cout<<ctc;
for (;ctc;--ctc) {
for (int i=0; c[ctc][i]; ++i) {
cout<<c[ctc][i];
}
cout<<'\n';
}
}