#include "stdio.h"
#include "string.h"
#define M 20
int map[M][M];
int n, m;
int mark[M];
int rank[M];
int pos;
int scc;
int all[M];
void init(){
int i;
int u, v;
memset(map, 0, sizeof(map));
for(i=0; i<m; i++){
scanf("%d %d", &u, &v);
map[u][v] = 1;
}
}
void revers(){
int i, j, t;
for(i=0; i<n; i++)
for(j=0; j<i; j++){
t = map[i][j];
map[i][j] = map[j][i];
map[j][i] = t;
}
}
void DFS(int u){
int i;
mark[u] = 1;
for(i=0; i<n; i++){
if(!mark[i] && map[u][i])
DFS(i);
}
rank[pos++] = u;
}
void _DFS(int u){
int i;
mark[u] = 1;
for(i=0; i<n; i++){
if(!mark[i] && map[u][i])
_DFS(i);
}
all[u] = scc;
}
void main(){
int i, j;
freopen("in.txt", "r", stdin);
while(scanf("%d %d", &n, &m)!=EOF){
init();
pos = 0;
memset(mark, 0, sizeof(mark));
for(i=0; i<n; i++){
if(!mark[i])
DFS(i);
}
revers();
scc = 1;
memset(mark, 0, sizeof(mark));
memset(all, 0, sizeof(all));
for(i=--pos; i>=0; i--){
if(!mark[rank[i]]){
_DFS(rank[i]);
scc++;
}
}
for(i=1; i<scc; i++){
for(j=0; j<n; j++){
if(all[j]==i)
printf("%d ", j);
}
printf("\n");
}
}
}