program ctc;
const fi='ctc.in';
fo='ctc.out';
var f:text;
g:text;
var a,tr:array of array of longint;
v,v2,v3:array[1..100000] of 0..1;
viz:array[1..100000] of longint;
bufin,bufout:array[1..70000] of byte;
n,m,i,c,d,nr:longint;
s:ansistring;
s1:string;
procedure df(nod:longint);
var j:longint;
begin
v[nod]:=1;
for j:=1 to a[nod,0] do
if v[a[nod,j]]=0 then
df(a[nod,j]);
end;
procedure trs(nod:longint);
var j:longint;
begin
if v[nod]=1 then
begin
str(nod,s1);
s:=s+s1+' ';
viz[nod]:=1;
end;
v2[nod]:=1;
for j:=1 to tr[nod,0] do
if v2[tr[nod,j]]=0 then
trs(tr[nod,j]);
end;
begin
assign(f,fi);
reset(f);
assign(g,fo);
rewrite(g);
settextbuf(f,bufin);
settextbuf(g,bufout);
read(f,n,m);
setlength(a,n+1,1);
setlength(tr,n+1,1);
for i:=1 to m do
begin
read(f,c,d);
inc(a[c,0]);
setlength(a[c],a[c,0]+1);
a[c,a[c,0]]:=d;
inc(tr[d,0]);
setlength(tr[d],tr[d,0]+1);
tr[d,tr[d,0]]:=c;
end;
{setlength(v2,n+1);
setlength(v,n+1); }
for i:=1 to n do
begin
if viz[i]=0 then
begin
{ fillchar(v,sizeof(v),0);
fillchar(v2,sizeof(v2),0); }
v:=v3;
v2:=v3;
df(i);
trs(i);
inc(nr);
s:=s+#13#10
end;
end;
str(nr,s1);
s1:=s1+#13#10;
insert(s1,s,1);
write(g,s);
close(f);
close(g);
end.