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?!"