fork download
  1. #include <iostream>
  2. #include <utility>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <string>
  6. #define ll long long
  7. #define vi vector<int>
  8. #define vii vector<ii>
  9. #define rep(i, n) for(int i=0;i<n;i++)
  10. #define repr(i, a,b) for(int i=a;i>=b;i--)
  11. #define reps(i, a, b) for(int i=a;i<b;i++)
  12. #define ii pair<int, int>
  13. using namespace std;
  14.  
  15. int F[10];
  16. ll FAC[20];
  17.  
  18. ll fac(int x)
  19. {
  20. return FAC[x];
  21. }
  22. ll g(int a[])
  23. {
  24. ll res = 0;
  25. ll s = 0;
  26. for (int i = 0; i < 10; i++)s += a[i];
  27. res = fac(s);
  28. for (int i = 0; i < 10; i++)res /= a[i];
  29. return res;
  30. }
  31. ll f(int a[])
  32. {
  33. for (int i = 0; i < 10; i++)if (F[i]>0 && a[i] == 0)return 0;
  34. ll res = 0;
  35. for (int i = 1; i < 10; i++)
  36. {
  37. if (a[i] >= 1)
  38. {
  39. a[i]--;
  40. res += g(a);
  41. a[i]++;
  42. }
  43. }
  44. return res;
  45. }
  46. int main()
  47. {
  48. F[0] = 1;
  49. for (int i = 1; i < 20; i++)F[i] = F[i - 1] * i;
  50. ll ans = 0;
  51. string s; cin >> s;
  52. for (int i = 0; i < 10; i++)F[i] = 0;
  53. for (int i = 0; i < s.length(); i++)F[s[i] - '0']++;
  54. int a[10];
  55. int g[10];
  56. for (a[0] = 0; a[0] <= F[0]; a[0]++)
  57. {
  58. for (a[1] = 0; a[1] <= F[1]; a[1]++)
  59. {
  60. for (a[2] = 0; a[2] <= F[2]; a[2]++)
  61. {
  62. for (a[3] = 0; a[3] <= F[3]; a[3]++)
  63. {
  64. for (a[4] = 0; a[4] <= F[4]; a[4]++)
  65. {
  66. for (a[5] = 0; a[5] <= F[5]; a[5]++)
  67. {
  68. for (a[6] = 0; a[6] <= F[6]; a[6]++)
  69. {
  70. for (a[7] = 0; a[7] <= F[7]; a[7]++)
  71. {
  72. for (a[8] = 0; a[8] <= F[8]; a[8]++)
  73. {
  74. for (a[9] = 0; a[9] <= F[9]; a[9]++)
  75. {
  76. for (int i = 0; i < 10; i++)g[i] = a[i];
  77. ans += f(g);
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }
  85. }
  86. }
  87. }
  88. cout << ans << endl;
  89. }
Runtime error #stdin #stdout 0s 4400KB
stdin
97
stdout
Standard output is empty