/*
  Permutazioni di una stringa
*/

import javax.swing.*;

class Permutazioni {
  
  static int lungpar,           //lunghezza della parola
             numperm = 1;       //contatore di permutazioni
  
  public static void main(String[] args) {
    String parola;
    do {
      //input della parola
      parola = JOptionPane.showInputDialog("Inserisci parola lunga tra i 2 e i 6 caratteri");
      lungpar = parola.length();
    }
    while (lungpar<2 || lungpar>6);

    
    //dimensiona un Array di caratteri che conteranno la parola
    char[] vetPar = new char[lungpar];
    
    //riempie l'array dei caratteri della stringa digitata
    for (int i=0; i<lungpar; i++) vetPar[i] = parola.charAt(i);
    
    permuta(vetPar, 0);
    System.out.println("\nNumero permutazioni: " + numperm);
    
    System.exit(0);
  }
   
  //metodo ricorsivo per le permutazioni
  static void permuta(char vet[], int item) {
    //caso base: la lunghezza della parola è 1 allora stampala
    if (item == lungpar - 1) stampa(vet);
    else {
      //caso generale
      permuta(vet, item+1);
      for (int k = item+1; k < lungpar; k++) {
        swaplettere(vet, item, k);
        permuta(vet, item+1);
        swaplettere(vet, item, k);
        numperm++;
      }
    }
  }
  
  //Stampa contenuto array di caratteri  
  static void stampa(char vet[]) {
      for (int i=0; i<vet.length; System.out.print(vet[i++]));
      System.out.print("\t");
  }
  
  //Scambia il contenuto di due locazioni dell'array
  static void swaplettere(char v[], int x, int y) {
    char temp;
    temp = v[x];
    v[x] = v[y];
    v[y] = temp;
  }

}