//非常好的递归题,我差一点就想出来了,再接再励!
/*
经典报错总结:(使用传来的字符串参数出现问题)
请检查是否存在数组、列表等越界非法访问,内存非法访问等情况
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::erase: __pos (which is 2) > this->size() (which is 1)
nextstr=str;
nextstr=nextstr.erase(i,1);//不能写成nextstr=str.erase(i,1);
不能对传来的string参数进行改变
*/
#include <iostream>
using namespace std;
void DG(string pre,string str)
{
int l=str.size();
string nextpre,nextstr;
if(l==1)
{
cout<<pre+str<<endl;
}
else
{
for(int i=0;i<l;i++)
{
nextpre=pre+str[i];
nextstr=str;
nextstr=nextstr.erase(i,1);//不能写成nextstr=str.erase(i,1);
DG(nextpre,nextstr);
}
}
}
int main() {
string a;
while (cin >> a ) {
DG("",a);
}
}