Надеюсь на перле вам подойдет. Только недавно делала, правда он циферный..
#! /usr/bin/perl
use strict;
use warnings;
use Fcntl;
#my $num=5;
#my @str=();
sub nextShuffle($)
{ my $shuffle=shift;
for(my $i=1; $i<@$shuffle; $i++)
{
if($shuffle->[$i]<$i)
{
$shuffle->[$i]++;
return $shuffle;
}
else
{
$shuffle->[$i]=0;
}
}
return;
}
sub nextPermutation($)
{
my $p=shift;
my $i=$#$p-1;
$i-- while $i>=0 and $p->[$i]>$p->[$i+1];
if($i>=0)
{
my $j=$i+1;
$j++ while $j<$#$p and $p->[$j+1]>$p->[$i];
@$p[$i, $j]=@$p[$j, $i];
push @$p, reverse splice @$p, $i+1;
return $p;
}
return;
}
sub fact{
my $n = shift;
if ($n==0) {
return 1;
} else {
return $n*fact($n-1);
}
}
my $fileout = 'out.txt';
open(my $fo, '>>:encoding(UTF-8)', $fileout)
or die "Could not open file '$fileout' $!";
my $n=shift;
print $fo fact($n)."\n";
die "$0: Нужно неотрицательное число!\n" unless defined($n) and $n>=0;
for(my $p=[1..$n]; defined $p; $p=nextPermutation($p))
{
print $fo "@$p\n";
}
#for (my $i=1; $i<$num; $i++){
# $str[$i]=$i;
#}