uses crt; const n = 3; { Attention: Change this number according to of then main program (maximal value is 6) } var total: integer; used: array[1 .. n] of 0..1; a: array[1 .. n] of byte; pere: array[1 .. 720] of string[n]; procedure generate(x: byte); var i: integer; begin if x = Succ(n) then begin inc(total); for i := 1 to n do pere[total] := pere[total] + chr(a[i] + 48); writeln; end else for i := 1 to n do if used[i] = 0 then begin used[i] := 1; a[x] := i; generate(Succ(x)); used[i] := 0 end; end; function is_simple(number: integer): boolean; var i, j: integer; begin is_simple := true; for i := 2 to trunc(sqrt(number)) do begin if (number mod i) = 0 then begin is_simple := false; break end; end; end; function is_super_simple(number: integer): boolean; var i: integer; good: boolean; num: array[1 .. 3] of byte; begin for i := 3 downto 1 do begin num[i] := number mod 10; number := number div 10 end; good := true; for i := 1 to total do good := good and is_simple( 100*num[ ord(pere[i][1]) - ord('0') ] + 10*num[ ord(pere[i][2]) - ord('0') ] + 1*num[ ord(pere[i][3]) - ord('0') ] ); is_super_simple := good end; var i: integer; begin total := 0; fillchar(used,sizeof(used),0); generate(1); clrscr; for i := 1 to 999 do if is_super_simple(i) then writeln(i); end.