#include<iostream.h>

#include<conio.h>

#include<stdio.h>

 

int x[100],n,k;

//k este este nivelul din stiva (indexul - vetorul solutie),curent

 

 

int e_valid()

{for(int i=1;i<=k-1;i++)//parcurg nivelurile anterioarenivelului curent

          if(x[i]==x[k])

              return 0;

return 1;

}

 

void afisare()

{for(int i=1;i<=n;i++)

   cout<<x[i]<<" ";

cout<<endl;

}

 

void back()

{k=1; //pe primul nivel initial

while(k>0)//cand k va descreste la 0 algoritmul se incheie

   if(x[k]<n)

          {x[k]++;

           if(e_valid())//daca elementul incarcat este valid

                    if(k==n)//verific daca am ajuns la solutia completa.

                        afisare();

                     else    //daca nu am solutia completa urc in stiva (maresc vectorul, adica pe k)

                        {k++;

                         x[k]=0;}

 

          }

    else

          k--;

 

}

 

 

void main()

{clrscr();

 cout<<"n=";

 cin>>n;

 back();

 getch();

}