(* "tra04.h8.46-47.pohja.p SJ *)

program lomituslajittelu;

(* alkioiden määrä, suurin arvo *)

const	max = 100;
		maxvalue = 100000;

type taulu = array[1..max] of integer;

(* 46 *)
procedure merge_taulukolla(var t : taulu; a, b, c : integer);
begin
end; (* merge_taulukolla() *)


(* lomituslajittelu perinteisesti jakaen *)
(* ei siis kelpaa demovastaukseksi *)
procedure mergesort_rek(var t : taulu; a, l : integer);
	var k : integer;
begin

  if (a < l) then begin
	  k := (a + l) div 2;
	  mergesort_rek(t, a, k);
	  mergesort_rek(t, k+1, l);
	  merge_taulukolla(t, a, k, l);
  end;

end; (* mergesort_rek() *)


procedure mergesort_alku(var t : taulu; n : integer);
begin
  mergesort_rek(t, 1, n);
end;

(* 47 *)
(* ei-rekursiivinen, 1-jaksoista lähtevä versio *)
procedure mergesort(var t : taulu; n : integer);
begin
end;

(* pääohjelma *)
var     t : taulu;
        i, ed : integer;
        s1, s2 : longint;
        ok : boolean;

begin

	(* 1. version kokeilu *)
	ok := true;

	s1 := 0;
	for i := 1 to max do begin
			t[i] := random(maxvalue-1);
			s1 := s1 + t[i];
	end;

	mergesort_alku(t, max);

	(* *)
	s2 := t[1];
	ed := t[1];
	for i := 2 to max do begin
			if (ed > t[i]) then
					ok := false;
			s2 := s2 + t[i];
	end;

	ok := ok and (s1 = s2);

	writeln(ok);


	(* 2. version kokeilu *)
	ok := true;

	s1 := 0;
	for i := 1 to max do begin
			t[i] := random(maxvalue-1);
			s1 := s1 + t[i];
	end;

	mergesort(t, max);

	s2 := t[1];
	ed := t[1];
	for i := 2 to max do begin
			if (ed > t[i]) then
					ok := false;
			s2 := s2 + t[i];
	end;

	ok := ok and (s1 = s2);

	writeln(ok);

end.

