#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for(int i= 0 ; i<n ;i++)
#define repr(i, n) for (int i = (n) - 1; i >= 0; i--)
#define pb push_back
#define pi 3.141592653589793
#define sll signed long long int // -10^9 to 10^9
#define ll long long int// for 0 to 10^18
#define ull unsigned long long int // for 0 to 10^18
#define endl "\n"
#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define all(x) x.begin(),x.end()
#define MOD 1000000007
typedef vector<int> vi;
/*
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 :)
ll res = 1;
while ( b > 0 ) {
if ( b&1 ) res = (res*a)%M;
a = (a*a)%M;
b >>= 1;
}
return res;
}
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
////and if series is something for eg 3^2 + 3^4 here a= 9,r=9 our ans can be found out as
// let a1= first term 3^2 just do ans = a1*sum_ofGP_modM(9 , N-1, ull mod)
if(n == 0) return 1;
if(n == 1) return (1 + a) % mod;
ll res;
if(n % 2)
res = (a + 1) * GPSumWithMod((a*a) % mod , (n-1)/2);
else{ res = (a + 1) * GPSumWithMod((a*a) % mod , n/2 - 1);res %= mod;res = (res * a) + 1;}
return res % mod;
}
//Whenever we have (a/b)%P == (a * fast_pow(b,P-2))%P
bool isprime(ll a){
if(a==2)return 1;
if(!(a&1))return 0;
for(ll i=3;i*i<=a;i+=2)
if(a%i==0)return 0;
return 1;
} */
void solve(string s,string out,int j,int len,vi cnt){
//Base Case
if(j==len){
out[j]='\0';
cout<<out<<endl;
return;
}
//REc Case
for(int k=0;k<len;k++){
if(cnt[s[k]-'a']==0){
continue;
}
out[j]=s[k];
cnt[s[k]-'a']--;
solve(s,out,j+1,len,cnt);
cnt[s[k]-'a']++;//Backtrack it
}
}
int main(){
string s;cin>>s;
int len=s.size();
vi cnt(26,0);
for(int i=0;i<len;i++) cnt[s[i]-'a']++;
string out;
out.reserve(len+1);
solve(s,out,0,len,cnt);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSByZXAoaSwgbikgZm9yKGludCBpPSAwIDsgaTxuIDtpKyspIAojZGVmaW5lIHJlcHIoaSwgbikgZm9yIChpbnQgaSA9IChuKSAtIDE7IGkgPj0gMDsgaS0tKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHBpIDMuMTQxNTkyNjUzNTg5NzkzCiNkZWZpbmUgc2xsIHNpZ25lZCBsb25nIGxvbmcgaW50IC8vIC0xMF45IHRvIDEwXjkKI2RlZmluZSBsbCBsb25nIGxvbmcgaW50Ly8gZm9yIDAgdG8gMTBeMTgKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nIGludCAvLyBmb3IgMCB0byAxMF4xOAojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIEZBU1QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Y2luLnRpZShOVUxMKTtjb3V0LnRpZShOVUxMKTsKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLHguZW5kKCkKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwovKiAKbGwgZmFzdF9wb3cobGwgYSwgbGwgYil7fSAgLy9hXmIgaW4gTyhsb2diKSB0aW1lICB0byBmaW5kIChhXmIpbW9kTSBqdXN0IGFkZCBtb2QgdGVybSB3aGVyZSBtdWx0IGhhcHBlbnMgOikKCWxsIHJlcyA9IDE7Cgl3aGlsZSAoIGIgPiAwICkgewoJCWlmICggYiYxICkgcmVzID0gKHJlcyphKSVNOwoJCWEgPSAoYSphKSVNOwoJCWIgPj49IDE7Cgl9CglyZXR1cm4gcmVzOwp9CmxsIHN1bV9vZkdQX21vZE0obGwgYSAsIGxsIG4sIGxsIG1vZCkgIC8vLy8gKDEgKyBBXjEgK0FeMiArIEFeMyArIEFeNCArIC0tLS0tLS0rIEFeTikgJSBNICB1c3VhbGx5IGhlcmUgbj0gVG90YWwgdGVybXMgaW4gc2VyaWVzLTEKLy8vL2FuZCAgaWYgc2VyaWVzIGlzIHNvbWV0aGluZyBmb3IgZWcgM14yICsgM140IGhlcmUgYT0gOSxyPTkgIG91ciBhbnMgY2FuIGJlIGZvdW5kIG91dCBhcyAKLy8gbGV0IGExPSBmaXJzdCB0ZXJtIDNeMiBqdXN0IGRvIGFucyA9IGExKnN1bV9vZkdQX21vZE0oOSAsIE4tMSwgdWxsIG1vZCkKCWlmKG4gPT0gMCkgcmV0dXJuIDE7CglpZihuID09IDEpIHJldHVybiAoMSArIGEpICUgbW9kOwoJbGwgcmVzOwoJaWYobiAlIDIpCgkJcmVzID0gKGEgKyAxKSAqIEdQU3VtV2l0aE1vZCgoYSphKSAlIG1vZCAsIChuLTEpLzIpOwoJZWxzZXsgcmVzID0gKGEgKyAxKSAqIEdQU3VtV2l0aE1vZCgoYSphKSAlIG1vZCAsIG4vMiAtIDEpO3JlcyAlPSBtb2Q7cmVzID0gKHJlcyAqIGEpICsgMTt9CiAgICByZXR1cm4gcmVzICUgbW9kOwp9CiAKLy9XaGVuZXZlciB3ZSBoYXZlIChhL2IpJVAgPT0gKGEgKiBmYXN0X3BvdyhiLFAtMikpJVAKYm9vbCBpc3ByaW1lKGxsIGEpewogIGlmKGE9PTIpcmV0dXJuIDE7CiAgaWYoIShhJjEpKXJldHVybiAwOwogIGZvcihsbCBpPTM7aSppPD1hO2krPTIpCiAgICBpZihhJWk9PTApcmV0dXJuIDA7CiAgcmV0dXJuIDE7Cn0gKi8Kdm9pZCBzb2x2ZShzdHJpbmcgcyxzdHJpbmcgb3V0LGludCBqLGludCBsZW4sdmkgY250KXsKICAvL0Jhc2UgQ2FzZQogIGlmKGo9PWxlbil7CiAgICBvdXRbal09J1wwJzsKICAgIGNvdXQ8PG91dDw8ZW5kbDsKICAgIHJldHVybjsKICB9CiAgLy9SRWMgQ2FzZQogIGZvcihpbnQgaz0wO2s8bGVuO2srKyl7CiAgICBpZihjbnRbc1trXS0nYSddPT0wKXsKICAgICAgY29udGludWU7CiAgICB9CiAgICBvdXRbal09c1trXTsKICAgIGNudFtzW2tdLSdhJ10tLTsKICAgIHNvbHZlKHMsb3V0LGorMSxsZW4sY250KTsKICAgIGNudFtzW2tdLSdhJ10rKzsvL0JhY2t0cmFjayBpdAogIH0KCn0KIAppbnQgbWFpbigpewogIHN0cmluZyBzO2Npbj4+czsKICBpbnQgbGVuPXMuc2l6ZSgpOwogIHZpIGNudCgyNiwwKTsKICBmb3IoaW50IGk9MDtpPGxlbjtpKyspIGNudFtzW2ldLSdhJ10rKzsKICBzdHJpbmcgb3V0OwogIG91dC5yZXNlcnZlKGxlbisxKTsKICBzb2x2ZShzLG91dCwwLGxlbixjbnQpOwogIHJldHVybiAwOwp9CgoK