fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define rep(i, n) for(int i= 0 ; i<n ;i++)
  5. #define repr(i, n) for (int i = (n) - 1; i >= 0; i--)
  6. #define pb push_back
  7. #define pi 3.141592653589793
  8. #define sll signed long long int // -10^9 to 10^9
  9. #define ll long long int// for 0 to 10^18
  10. #define ull unsigned long long int // for 0 to 10^18
  11. #define endl "\n"
  12. #define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
  13. #define all(x) x.begin(),x.end()
  14. #define MOD 1000000007
  15. typedef vector<int> vi;
  16. /*
  17. ll fast_pow(ll a, ll b){} //a^b in O(logb) time to find (a^b)modM just add mod term where mult happens :)
  18. ll res = 1;
  19. while ( b > 0 ) {
  20. if ( b&1 ) res = (res*a)%M;
  21. a = (a*a)%M;
  22. b >>= 1;
  23. }
  24. return res;
  25. }
  26. ll sum_ofGP_modM(ll a , ll n, ll mod) //// (1 + A^1 +A^2 + A^3 + A^4 + -------+ A^N) % M usually here n= Total terms in series-1
  27. ////and if series is something for eg 3^2 + 3^4 here a= 9,r=9 our ans can be found out as
  28. // let a1= first term 3^2 just do ans = a1*sum_ofGP_modM(9 , N-1, ull mod)
  29. if(n == 0) return 1;
  30. if(n == 1) return (1 + a) % mod;
  31. ll res;
  32. if(n % 2)
  33. res = (a + 1) * GPSumWithMod((a*a) % mod , (n-1)/2);
  34. else{ res = (a + 1) * GPSumWithMod((a*a) % mod , n/2 - 1);res %= mod;res = (res * a) + 1;}
  35.   return res % mod;
  36. }
  37.  
  38. //Whenever we have (a/b)%P == (a * fast_pow(b,P-2))%P
  39. bool isprime(ll a){
  40.   if(a==2)return 1;
  41.   if(!(a&1))return 0;
  42.   for(ll i=3;i*i<=a;i+=2)
  43.   if(a%i==0)return 0;
  44.   return 1;
  45. } */
  46. void solve(string s,string out,int j,int len,vi cnt){
  47. //Base Case
  48. if(j==len){
  49. out[j]='\0';
  50. cout<<out<<endl;
  51. return;
  52. }
  53. //REc Case
  54. for(int k=0;k<len;k++){
  55. if(cnt[s[k]-'a']==0){
  56. continue;
  57. }
  58. out[j]=s[k];
  59. cnt[s[k]-'a']--;
  60. solve(s,out,j+1,len,cnt);
  61. cnt[s[k]-'a']++;//Backtrack it
  62. }
  63.  
  64. }
  65.  
  66. int main(){
  67. string s;cin>>s;
  68. int len=s.size();
  69. vi cnt(26,0);
  70. for(int i=0;i<len;i++) cnt[s[i]-'a']++;
  71. string out;
  72. out.reserve(len+1);
  73. solve(s,out,0,len,cnt);
  74. return 0;
  75. }
  76.  
  77.  
  78.  
Success #stdin #stdout 0s 15240KB
stdin
ABA
stdout
Standard output is empty