void print(char *a, char *b) { char *a1, *b1; int apos = strlen(a); int olen = apos; if ( apos == 0 ) { printf("%s\n", b); return; } while ( apos ) { /* construct new a */ a1 = malloc(olen+1); strcpy(a1, a); /* remove extra char */ memmove(a1+apos-1, a1+apos, olen-apos+1); /* construct new b */ b1 = malloc(strlen(b)+2); b1[0] = a[--apos]; strcpy(b1+1, b); print(a1, b1); } }