ひまだから作ってみた。
#include <stdio.h>
#include <stdlib.h>
static int is_gaishutsu(int *buffer, int size, int number) {
for (--size; size>=0; --size) if (buffer[size] == number) return 1;
return 0;
}
static void make_pattern_sub(int *buffer, int radix, int size, int index)
{
int i,j;
if (index >= size) {
for (i = 0; i < size; i ++) putchar('A' + buffer[i]);
putchar('\n');
return;
}
for (i = 0; i < radix; i ++) {
if (is_gaishutsu(buffer, index, i)) continue;
buffer[index] = i;
make_pattern_sub(buffer, radix, size, index+1);
}
}

void make_pattern(int radix, int size) {
int *buffer = malloc(sizeof (int) * size);
make_pattern_sub(buffer, radix, size, 0);
free(buffer);
}
int main(void) {
for (;;){for (;;){for (;;){for (;;){ make_pattern(4, 4); goto END;}}}}
END:
return 0;
}