#include <iostream.h>
#include <stdlib.h>
#include <string.h>

// Program wypisuje wszystkie permutacje wczytanego ciagu znakow
// Wpisanie zbyt dlugiego ciagu nie polecane :)

// funkcja generujaca permutacje z argumentem domyslnym
void permutacje(char *,int =0);


void zamien(char& x, char& y){
  char p=x;
  x=y;
  y=p;
}

int main(){
  char Tablica[100];

  cout << " Podaj ciag znakow" <<endl;
  cin.getline(Tablica,100);

  cout << "Permutacje " << Tablica <<" to :\n";

  permutacje(Tablica);

  return 0;
}

// funkcja wypisujaca permutacje zadanej tablicy
// parametr T to tablica do spermutowania, n - il. el.
// index, to nr od ktorego nalezy zaczac permutowanie
void permutacje(char *T,int index){

  int i;
  int L=strlen(T);



  // jesli jest index to ost. element, to wypisz tablice
  // (jest tylko 1 permutacja ost. elementu)
  if ( index==L ) {
	cout << T << endl;
  }
  else {

    for ( i=index; i<L ; i++ ){
      // Wstaw w miejsce index i-ty element tablicy
      zamien(T[index],T[i]);
      // wygeneruj wszystkie permutacje dalszej czesci tablicy
      permutacje(T,index+1);
      // spowrotem zamien elementy
      zamien(T[i],T[index]);
    }
    
    
  }
}



