#include<iostream>
using namespace std ;
void outprint(char *b)
{
cout<<b<<endl;
}
/*从a中获取第j位置的字符,用x返回*/
void getElem(char *a , int j , char &x)
{
x = a[j] ;
}
/*将x插入集合b的k位置上*/
void Insert(char *b , int k , char x)
{
b[k]= x ;
b[k+1] = '\0' ;
}
/*从b中删除第k个元素,用x返回*/
void Delete(char *b , int k , char x)
{
x = b[k];
b[k] = '\0' ;
}
/*递推求集合的子集*/
void GetPowerSet(int i ,char *a , char b[])
{
int lena = strlen(a) ;
if( i > lena -1 )
outprint(b);
else
{
char x ;
getElem(a,i,x) ;
int k = strlen(b)-1 ;
Insert(b,k+1,x);
GetPowerSet(i + 1 , a , b );
Delete(b,k+1 , x);
GetPowerSet(i + 1 , a , b );
}
}
int main(void)
{
char a[100] , b[100];
b[0]='\0';
gets(a);
/*求一个集合的所有子集*/
GetPowerSet(0 , a , b);
return 0;
}