//字典序全排列.cpp #include<iostream> #include<string> using namespace std; #define M 100 int count; void prin(int *a,int m) { int i; cout<<count++<<": "; for(i=0;i<m-1;i++) cout<<a[i]<<" "; cout<<a[m-1]<<endl; } void genperm(int *a,int n,int &index) { int i,j,k,t,tmp; if(a[index]==n-index) index++; prin(a,n); for(j=n-2;j>=0;j--) if(a[j]<a[j+1]) break; for(k=n-1;k>=0;k--) if(a[k]>a[j]) break; tmp=a[j],a[j]=a[k],a[k]=tmp; for(i=j+1,t=n-1;i<=t;i++,j--) tmp=a[i],a[i]=a[t],a[t]=tmp; } void genallperm(int *a,int n) { int index; for(index=0;index<n;index++) a[index]=index+1; index=0; while(index<n-1) genperm(a,n,index); } int main() { int n,t,cnt=0,a[M]; while(cin>>n) { count=1; if(n==0) break; cout<<"Case "<<++cnt<<" :n= "<<n<<endl; genallperm(a,n); cout<<endl; } return 0; }