#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();
}