#include<vector>
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
string insertCharAt(string word,char c,int i)
{
string start = word.substr(0, i);
string end = word.substr(i);
return start + c + end;
}
vector<string> getPermutation(string str)
{
//if(str.empty())
//return (vector<string>());
vector<string> permutations;
if(str.length()==0)
{
permutations.push_back("");
return permutations;
}
char first=str.at(0);
string remainder=str.substr(1);
vector<string> words=getPermutation(remainder);
for(unsigned int i=0;i<words.size();i++)
{
string temp=words[i];
for(unsigned int j=0;j<=temp.length();j++)
{
string s=insertCharAt(temp,first,j);
permutations.push_back(s);
}
}
return permutations;
}
int main()
{
string str="ABCD";
vector<string> permutation=getPermutation(str);
for(unsigned int i=0;i<permutation.size();i++)
cout<<permutation[i]<<"\n";
return 0;
}
I2luY2x1ZGU8dmVjdG9yPiAgCiNpbmNsdWRlPGFsZ29yaXRobT4gIAojaW5jbHVkZTxpb3N0cmVhbT4gIAojaW5jbHVkZTxzdHJpbmc+ICAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIApzdHJpbmcgaW5zZXJ0Q2hhckF0KHN0cmluZyB3b3JkLGNoYXIgYyxpbnQgaSkgIAp7ICAKICAgIHN0cmluZyBzdGFydCA9IHdvcmQuc3Vic3RyKDAsIGkpOyAgCiAgICBzdHJpbmcgZW5kID0gd29yZC5zdWJzdHIoaSk7ICAKICAgIHJldHVybiBzdGFydCArIGMgKyBlbmQ7ICAKfSAgCnZlY3RvcjxzdHJpbmc+IGdldFBlcm11dGF0aW9uKHN0cmluZyBzdHIpICAKeyAgCiAgICAvL2lmKHN0ci5lbXB0eSgpKSAgCiAgICAgICAgLy9yZXR1cm4gKHZlY3RvcjxzdHJpbmc+KCkpOyAgCiAgICB2ZWN0b3I8c3RyaW5nPiBwZXJtdXRhdGlvbnM7ICAKICAgIGlmKHN0ci5sZW5ndGgoKT09MCkgIAogICAgeyAgCiAgICAgICAgcGVybXV0YXRpb25zLnB1c2hfYmFjaygiIik7ICAKICAgICAgICByZXR1cm4gcGVybXV0YXRpb25zOyAgCiAgICB9ICAKICAgIGNoYXIgZmlyc3Q9c3RyLmF0KDApOyAgCiAgICBzdHJpbmcgcmVtYWluZGVyPXN0ci5zdWJzdHIoMSk7ICAKICAgIHZlY3RvcjxzdHJpbmc+IHdvcmRzPWdldFBlcm11dGF0aW9uKHJlbWFpbmRlcik7ICAgICAKICAgIGZvcih1bnNpZ25lZCBpbnQgaT0wO2k8d29yZHMuc2l6ZSgpO2krKykgIAogICAgeyAgCiAgICAgICAgc3RyaW5nIHRlbXA9d29yZHNbaV07ICAKICAgICAgICBmb3IodW5zaWduZWQgaW50IGo9MDtqPD10ZW1wLmxlbmd0aCgpO2orKykgIAogICAgICAgIHsgIAogICAgICAgICAgICBzdHJpbmcgcz1pbnNlcnRDaGFyQXQodGVtcCxmaXJzdCxqKTsgIAogICAgICAgICAgICBwZXJtdXRhdGlvbnMucHVzaF9iYWNrKHMpOyAgCiAgICAgICAgfSAgCiAgICAgICAgICAgIAogICAgfSAgCiAgICByZXR1cm4gcGVybXV0YXRpb25zOyAgCn0gIAogICAgCmludCBtYWluKCkgIAp7ICAKICAgIHN0cmluZyBzdHI9IkFCQ0QiOyAgCiAgICB2ZWN0b3I8c3RyaW5nPiBwZXJtdXRhdGlvbj1nZXRQZXJtdXRhdGlvbihzdHIpOyAgICAgCiAgICBmb3IodW5zaWduZWQgaW50IGk9MDtpPHBlcm11dGF0aW9uLnNpemUoKTtpKyspICAKICAgICAgICBjb3V0PDxwZXJtdXRhdGlvbltpXTw8IlxuIjsgIAogICAgcmV0dXJuIDA7ICAKfQ==