//非常好的递归题,我差一点就想出来了,再接再励!
/*
经典报错总结:(使用传来的字符串参数出现问题)

请检查是否存在数组、列表等越界非法访问,内存非法访问等情况
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);
    }
}