#include<iostream>
using namespace std;
void combication(char * str,char * p, char * q) {
if(*str=='\0'){
if(p!=q){
*q='\0';
cout<<p<<' ';
}return;}
combication(str+1,p,q);
*q=*str;
combication(str+1,p,q+1);
}
void combicate(char * str,int len){
int used[1024]={
0
};
char cache[1024];
char *result=cache+len;
*result='\0';
while(1){
int index=0;
while(used[index]){
used[index]=0;
result++;
if(++index==len){
return;
}
}
used[index]=true;
*--result=str[index];
cout<<result<<' ';
}
}
int power(int n){
int r=1;
for(int i=0;i<n;i++){
r*=2;
}
return r;
}
void combac(char * str,int len){
for(int i=1;i<power(len);i++){
int index=0;
int m=i;
while(m){
if(m%2)
cout<<str[index];
index++;
m/=2;
}
cout<<' ';
}
}
int main(){
char a[]="abc";
char temp[256];
char *p=temp;
char *q=temp;
combication(a,p,q);
//combicate(a,3);
//combac(a,3);
}