program silnia;
function Czytaj_liczbe: Int64;
var
  liczba: Int64;
begin
  Write('Podaj liczbÄ™ calkowita: ');
  ReadLn(liczba);
  Czytaj_liczbe := liczba;
end;

function Silnia_rekurencyjna(n: Int64): Int64;
begin
  if n = 0 then
    Silnia_rekurencyjna := 1
  else
    Silnia_rekurencyjna := n * Silnia_rekurencyjna(n - 1);
end;

function Silnia_iteracyjna(n: Int64): Int64;
var
  wynik, i: Int64;
begin
  wynik := 1;
  for i := 1 to n do
    wynik := wynik * i;
  Silnia_iteracyjna := wynik;
end;

procedure Wypisz_wyniki(wynikRek, wynikIter: Int64);
begin
   WriteLn('Silnia rekurencyjna: ', wynikRek:10);
   WriteLn('Silnia iteracyjna:   ', wynikIter:10);
end;

procedure Glowna_procedura;
var
  liczba, wynikRek, wynikIter: Int64;
begin
  liczba := Czytaj_liczbe;
  if liczba < 0 then
  begin
    WriteLn('Silnia jest zdefiniowana tylko dla liczb nieujemnych.');
    Exit;
  end;

  wynikRek := Silnia_rekurencyjna(liczba);
  wynikIter := Silnia_iteracyjna(liczba);
  Wypisz_wyniki(wynikRek, wynikIter);
end;

begin
   Glowna_procedura()
end.