#include <stdio.h> int fac[] = {1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800}; int Cantor(int n,char* s) { int ret = 0; for(int i=0;i<n;i++) { int cnt = 0; for(int j=i+1;j<n;j++) if(s[j] < s[i]) ++cnt; ret += cnt * fac[n-1-i]; } return ret; } void rCantor(int n,int nth,char *s) { int a[12]; for(int i=0;i<n;i++) a[i] = i; for(int i=0;i<n;i++) { int k = nth / fac[n-1-i]; nth = nth % fac[n-1-i]; s[i] = a[k] + 'a'; for(int j=k;j<n-1;j++) a[j] = a[j+1]; } s[n] = '\0'; }