@_is_absent
Вот накропал на скорую руку. Здесь, правда, есть зависимость от регистра, но при желании от нее легко избавиться:
Код:
uses
crt;
const
n = 5;
words: array [1..n] of string =
('copy', 'paste', 'clear', 'cut', 'undo');
procedure hk (s: string; k: integer); far;
var
i: integer;
c: char;
begin
if k > 5 then begin
writeln ('variant:');
for i := 1 to n do
writeln (words[i]:10, ' : ', s[i]);
end else begin
for i := 1 to length(words[k]) do begin
c := words[k, i];
if (pos(c, s) = 0) and (pos(c, words[k]) = i)
then hk (s + c, succ(k));
end;
end;
end;
begin
clrscr;
writeln ('result:');
hk ('', 1);
writeln ('- end -');
readkey;
end.