begin integer procedure Sort(A, N); integer array A; integer N; begin comment Sort A using bubble sort. Return number of swaps. ; boolean Changes; integer NSwaps, Ix, Tmp; Changes := true; while Changes do begin Changes := false; for Ix := 2 step 1 until N do begin if A(Ix-1) > A(Ix) then begin Tmp := A(Ix-1); A(Ix-1) := A(Ix); A(Ix) := Tmp; NSwaps := NSwaps+1; Changes := true; end if; end for; end while; Sort := NSwaps; end Sort; inspect new InFile("train.in") do begin integer NRuns; Open(Blanks(256)); NRuns := InInt; inspect new OutFile("train.out") do begin integer Ix; Open(Blanks(80)); for Ix := 1 step 1 until NRuns do begin integer N; N := InInt; begin integer array T(1:N); integer Tx; for Tx := 1 step 1 until N do T(Tx) := InInt; OutText("Optimal train swapping takes "); OutInt(Sort(T,N), 0); OutText(" swaps."); OutImage; end; end for; Close; end inspect; Close; end inspect; end