#include <stdio.h>
#include <string.h>

typedef unsigned int uint;

uint pow2(uint a, uint b) {

	   uint res = 1;

	   for(uint i = 1; i <= b; ++i) {

	   	   res = res * a;
	   }

	   return res;
}

void generate_subsets(char *str, uint dim) {
     
	 uint n = pow2(2, dim);


     for (int i = 0; i < n; ++i)
     {
     	for (int j = 0; j < 3; ++j)
     	{
     		 if(i & (1<<j)) {

                printf("%c", str[j]);
     		 }
     	}

     	printf("\n");
     }

}

int main(int argc, char const *argv[])
{
	char *str;

	str = "abc";
	
	uint len = strlen(str);

	generate_subsets(str, len);

	return 0;
}