/*
 * racks.c
 * Generates all possible Scrabble racks
 * Brian Kell, October 31, 2003
 * abodeman@yahoo.com
 * http://upsilon.unl.edu/
 */

#include <stdio.h>

#define LETTERS 100

int main() {

    char *a = "AAAAAAAAABBCCDDDDEEEEEEEEEEEEFFGGGHHIIIIIIIIIJKLLLLMMNNNNNN"
              "OOOOOOOOPPQRRRRRRSSSSTTTTTTUUUUVVWWXYYZ##";
    
    int i, j, k, l, m, n, o;
    char b = '\0', c = '\0', d = '\0', e = '\0', f = '\0', g = '\0', h = '\0';
    unsigned long count = 0;
    
    for (i = 0; i < LETTERS - 6; ++i) {
        if (a[i] == b)
            continue;
        b = a[i];
        for (j = i + 1; j < LETTERS - 5; ++j) {
            if (a[j] == c)
                continue;
            c = a[j];
            for (k = j + 1; k < LETTERS - 4; ++k) {
                if (a[k] == d)
                    continue;
                d = a[k];
                for (l = k + 1; l < LETTERS - 3; ++l) {
                    if (a[l] == e)
                        continue;
                    e = a[l];
                    for (m = l + 1; m < LETTERS - 2; ++m) {
                        if (a[m] == f)
                            continue;
                        f = a[m];
                        for (n = m + 1; n < LETTERS - 1; ++n) {
                            if (a[n] == g)
                                continue;
                            g = a[n];
                            for (o = n + 1; o < LETTERS; ++o) {
                                if (a[o] == h)
                                    continue;
                                h = a[o];
                                printf("%c%c%c%c%c%c%c\n", b, c, d, e, f, g, h);
                                ++count;
                            }
                            h = '\0';
                        }
                        g = '\0';
                    }
                    f = '\0';
                }
                e = '\0';
            }
            d = '\0';
        }
        c = '\0';
    }
    
    printf("\nThere are %lu possible Scrabble racks.\n", count);

    return 0;

}
