Реализация топологической сортировки
//(C) Igor Kvasov
const
maxn = 100;
var
was,ne,ans:array[1..maxn]of longint;
e:array[1..maxn,1..maxn]of longint;
nans,i,u,v,n,m:longint;
procedure find(u:longint);
var
j:longint;
begin
was[u]:=1;
for j:=1 to ne[u] do if was[e[u,j]]=0 then find(e[u,j]);
inc(nans); ans[nans]:=u;
end;
begin
read(n,m);
for i:=1 to m do begin
read(u,v);
inc(ne[u]); e[u,ne[u]]:=v;
end;
for i:=1 to n do if was[i]=0 then find(i);
for i:=n downto 1 do write(ans[i],' ');
end.