{ TASK: VAIKAIV LANG: PASCAL } program vvaikai; var vaikk, eilmax, newvaik, i, len, pos, zodziu, vvaikk, liek: integer; nend : boolean; failas: text; seka : array [1..25] of integer; eilute : array [1..50] of string; iskr : array [1..25] of boolean; procedure ismesti (position : integer); var j, k: integer; begin j := 1; k := 1; while (iskr[j] = true) or (k <> position) do begin if (iskr[j] <> true) then k := k + 1; j := j + 1; end; iskr[j] := true; liek := k; end; begin assign(failas, 'VAIKAI.IN'); reset(failas); Read(failas, vaikk); Read(failas, eilmax); ReadLn(failas, newvaik); for i := 1 to vaikk do Read(failas, seka[i]); ReadLn(failas); for i := 1 to eilmax do ReadLn(failas, eilute[i]); { eiluciu zodziu skaicius } zodziu := 0; for i := 1 to eilmax do begin len := Length(eilute[i]); nend := false; for pos := 1 to len do begin if (eilute[i][pos] <> ' ') then begin nend := true; end; if (eilute[i][pos] = ' ') AND (nend = true) then begin nend := false; zodziu := zodziu +1; end; end; if (nend = true) then zodziu := zodziu + 1; end; close(failas); vvaikk := vaikk + 1; liek := 1; while (vvaikk <> 1) do begin pos := zodziu mod vvaikk; pos := pos + liek - 1; if (pos >= vvaikk) then pos := pos mod vvaikk; if (pos = 0) then pos := vvaikk; ismesti(pos); vvaikk := vvaikk - 1; end; pos := 0; for i := 1 to vaikk+1 do begin if (iskr[i] <> true) then pos := i; end; assign(failas, 'VAIKAI.OUT'); rewrite(failas); for i := 1 to vaikk + 1 do begin if (i < pos) then write(failas,seka[i]); if (i = pos) then write(failas,newvaik); if (i > pos) then write(failas,seka[i-1]); if (i <> vaikk+1) then write(failas, ' '); end; close(failas); end.