const MaxN = 1000; var N : integer; Matice : array[1..MaxN, 1..MaxN] of boolean; {Matice[i,j] znamená že vede hrana z i do j} Stok : integer; procedure NactiMatici(); var i,j : integer; c : integer; begin readln(N); for i := 1 to N do for j := 1 to N do begin read(c); Matice[i, j] := ( c = 1 ); end; end; function OverKandidata(Kandidat : integer) : boolean; {oveří, zda-je opravdu kandidát stokem} var i : integer; Stok : boolean; begin Stok := true; for i := 1 to N do {vede hrana z kandidáta do ...} if Matice[Kandidat, i] then Stok := false; for i := 1 to N do {vede do kandidáta hrana z ...} if (i <> Kandidat) and not(Matice[i, Kandidat]) then Stok := false; OverKandidata := Stok; end; function NajdiKandidata():integer; {najde kandidáta na stok} var i,Kandidat:integer; begin Kandidat := 1; for i := 2 to N do if Matice[Kandidat, i] then Kandidat := i; NajdiKandidata := Kandidat; end; begin NactiMatici(); Stok := NajdiKandidata(); if OverKandidata(Stok) then writeln('Stok je ve vrcholu ',Stok,'.') else writeln('Stok neexistuje.'); end.