比递归直接构造要慢,不过思路和代码简单粗暴;

a的2个位置分别插入b

abba的3个位置分别插入c;

...最后排个序;

#include <iostream>
#include <string>
#include <list>
using namespace std;
int main() {
    char c; cin>>c;
    list<string> que={string()+c};
    while(cin>>c && c!='\n'){
        int sq=que.size();
        for(int j=0; j<sq; ++j, que.pop_front()){
            for(int i=0; i<=que.front().size(); ++i){
                string tmp=que.front();
                tmp.insert(tmp.begin()+i, c);
                que.push_back(tmp);
            }; 
        }
    }
    que.sort();
    for(auto & i : que) cout<<i<<endl;
}