s.c (954B)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <stdint.h> 5 6 int comp (const void *a, const void *b) 7 { 8 return (*(char *)a - *(char *)b); 9 } 10 11 uint64_t fact(uint64_t n) { 12 uint64_t res = 1; 13 for (int i = 2; i <= n; i++) 14 res *= i; 15 return res; 16 } 17 18 char a[8]; 19 20 int solve() 21 { 22 char abc[26] = {0}; 23 uint64_t res = 1; 24 char s[9]; 25 char tmp; 26 int n; 27 28 scanf("%s", s); 29 n = strlen(s); 30 qsort(s, n, sizeof(char), comp); 31 32 for (int i = 0; i < n; i++) 33 abc[s[i]-'a']++; 34 35 res *= fact(n); 36 37 for (int i = 0; i < 26; i++) 38 res /= fact(abc[i]); 39 40 printf("%llu\n", res); 41 42 while (1) { 43 int j = n - 2; 44 int l = n - 1; 45 46 printf("%s\n", s); 47 48 while (j >= 0 && s[j] >= s[j + 1]) j--; 49 if (j < 0) break; 50 51 while (s[j] >= s[l]) l--; 52 53 tmp = s[j]; 54 s[j] = s[l]; 55 s[l] = tmp; 56 57 for (int k = j + 1, l = n - 1; k < l; k++, l--) { 58 tmp = s[k]; 59 s[k] = s[l]; 60 s[l] = tmp; 61 } 62 } 63 64 return 0; 65 } 66 67 int main() 68 { 69 int t = 1; 70 while (t--) 71 solve(); 72 }