def perm_ric(S, P=""): # stampa le permutazioni (gli anagrammi) di una stringa
if len(S)==0:
print P
else:
for i in range(len(S)):
perm_ric(S[0:i]+S[i+1:], P+S[i])
def perm_ric_conta(S, P="", C=[0]): # oltre a stamparle, numera le permutazioni
if len(S)==0:
C[0]+=1
print "%7d: %s" % (C[0], P)
else:
for i in range(len(S)):
perm_ric_conta(S[0:i]+S[i+1:], P+S[i],C)
def perm_ric_tuple(S, P="", R=[]): # data la stringa di lunghezza n ritorna
# [(1, perm1),..., (n!, perm_n!)]
if len(S)==0:
if R==[]:
n=1
else:
n=R[-1][0]+1
R=R.append((n,P))
else:
for i in range(len(S)):
perm_ric_tuple(S[0:i]+S[i+1:], P+S[i])
return R
# Programma principale: produce tutte le permutazioni di una stringa
# utilizzando in sequenza tutte le tre funzioni
word=raw_input("Inserisci stringa (max 7 car. --> 5040 perm.): ")
if len(word)<=7:
perm_ric(word)
perm_ric_conta(word)
print perm_ric_tuple(word)
else:
print "Stringa in ingresso troppo lunga, vuoi invecchiare qui davanti?!"