allora mi voglio divertire anch'io,
eccone un'altra, sempre ricorsiva
codice:
program permuta;

{
Questo programma stampa ricorsivamente tutte le permutazione di una stringa di caratteri.
Compilare con fpc permuta
}

uses
  crt;
var
  str : string;
  procedure permu (c, str : string);
  var
    i, len : integer;
    c1 : char;
  begin

    len := Length(str);
    case len of
      0, 1 : WriteLn(str);
      2    : begin
      		WriteLn(c + str[1] + str[2]);
      		WriteLn(c + str[2] + str[1]);
    	     end;
      else
        for i := 1 to len do
        begin
          // swap dei caratteri
	  c1 := str[i];
          str[i] := str[1];
          str[1] := c1;
	  permu(c + c1, Copy(str, 2, len - 1));
        end;
    end;
  end;

begin

  WriteLn('Introduci la stringa da permutare :');
  ReadLn(str);

  WriteLn('***');
  permu('', str);
  WriteLn('***');

  WriteLn('');
  WriteLn('Grazie per aver usato questo programma.');
  WriteLn('');

end.
ciao
sergio