Link to this code:
https://cses.fi/paste/79b58a282aa4d978aed9c4/#include "bits/stdc++.h"
#define int long long
using namespace std;
int n;
void solve(int x,string &s, string temp,vector<int> taken,set<string> &res){
if(x==n){
res.insert(temp);
return;
}
for(int i=0;i<n;++i){
if(!taken[i]){
temp.push_back(s[i]);
taken[i]=1;
solve(x+1,s,temp,taken,res);
taken[i]=0; // backtrack
temp.pop_back(); // backtrack
}
}
}
signed main(){
string s;
cin>>s;
n=s.size();
set<string> res;
vector<int> taken(n,0);
string temp;
solve(0,s,temp,taken,res);
cout<<res.size()<<endl;
for(const string &x:res)cout<<x<<endl;
return 0;
}