#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
ll N = 1e9+7;
ll oo =1e13;
const ll maxx = 1000000 + 3;
ll n,m,k,q,x,y,z,l,r,mid,ans;
string s;
map<char,ll>mp;
unordered_set<string>ss;
void go(string s1) {
if (s1.size()>s.size())return;
if (s1.size() == s.size()) {
map<char,ll>mp1;
for (char c:s1){mp1[c]++;}
for(auto &it:mp1) {
if (it.second != mp[it.first]) return;
}
ss.insert(s1);
}
for (ll i=0;i<s.size();i++) {
go(s1+s[i]);
}
}
void solve() {
cin>>s;
for (char c:s){mp[c]++;}
go("");
ll size=ss.size();
cout<<size<<endl;
vector<string>v(ss.begin(),ss.end());
sort(v.begin(),v.end());
for (auto &it:v)cout<<it<<endl;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
ll t=1 ;
// cin >>t;
while (t--) {
ans=0;
solve();
}
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgJ1xuJwpsbCBOID0gMWU5Kzc7CmxsIG9vID0xZTEzOwpjb25zdCBsbCBtYXh4ID0gMTAwMDAwMCArIDM7CmxsIG4sbSxrLHEseCx5LHosbCxyLG1pZCxhbnM7CnN0cmluZyBzOwptYXA8Y2hhcixsbD5tcDsKdW5vcmRlcmVkX3NldDxzdHJpbmc+c3M7CnZvaWQgZ28oc3RyaW5nIHMxKSB7CiAgICBpZiAoczEuc2l6ZSgpPnMuc2l6ZSgpKXJldHVybjsKICAgIGlmIChzMS5zaXplKCkgPT0gcy5zaXplKCkpIHsKICAgICAgICBtYXA8Y2hhcixsbD5tcDE7CiAgICAgICAgZm9yIChjaGFyIGM6czEpe21wMVtjXSsrO30KCiAgICAgICAgZm9yKGF1dG8gJml0Om1wMSkgewogICAgICAgICAgICBpZiAoaXQuc2Vjb25kICE9IG1wW2l0LmZpcnN0XSkgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzcy5pbnNlcnQoczEpOwogICAgfQoKICAgIGZvciAobGwgaT0wO2k8cy5zaXplKCk7aSsrKSB7CiAgICAgICAgZ28oczErc1tpXSk7CiAgICB9Cgp9CnZvaWQgc29sdmUoKSB7CiAgICBjaW4+PnM7CiAgICBmb3IgKGNoYXIgYzpzKXttcFtjXSsrO30KICAgIGdvKCIiKTsKCiAgICBsbCBzaXplPXNzLnNpemUoKTsKICAgIGNvdXQ8PHNpemU8PGVuZGw7CiAgICB2ZWN0b3I8c3RyaW5nPnYoc3MuYmVnaW4oKSxzcy5lbmQoKSk7CiAgICBzb3J0KHYuYmVnaW4oKSx2LmVuZCgpKTsKICAgIGZvciAoYXV0byAmaXQ6diljb3V0PDxpdDw8ZW5kbDsKfQppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGxsIHQ9MSA7CiAgICAvLyBjaW4gPj50OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGFucz0wOwogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0=