ANAGRAMAS

Dado un conjunto de letras, escribe un programa que genere todas las palabras posibles. 

Ejemplo: De la palabra 'abc' el programa debe producir, explorando todas las posibles combinaciones de letras, las siguientes palabras: 'abc', 'acb', 'bac', 'bca', 'cab' y 'cba'. 

En la palabra obtenida del archivo de entrada, algunas letras pueden aparecer más de una vez. Para una palabra dada, el programa no debe producir la misma palabra más de una vez y las palabras deben aparecer ordenadas alfabéticamente. 

Archivo de entrada: el archivo esta formado por diversas palabras. La primera línea contiene el número de palabras que siguen. Cada línea contiene una palabra. Una palabra está compuesta por letras de 'a' a 'z', mayúsculas y minúsculas. Las letras mayúsculas y minúsculas deben considerarse diferentes. 

Archivo de salida: para cada palabra del archivo de entrada, el archivo de salida debe contener todas las diferentes palabras que pueden ser generadas con las letras de la palabra. Las palabras generadas desde una palabra deben mostrarse en orden alfabético. 

Ejemplo de entrada: 

2 

abc 

acba 

Ejemplo de salida: 

abc 

acb 

bac 

bca 

cab 

cba 

aabc 

aacb 

abac 

abca 

acab 

acba 

baac 

baca 

bcaa 

caab 

caba 

cbaa 