    #include <stdio.h>
    #include <ctype.h>

    int can_make_words(char **b, char *word)
    {
            int i, ret = 0, c = toupper(*word);

    #define SWAP(a, b) if (a != b) { char * tmp = a; a = b; b = tmp; }

            if (!c) return 1;
            if (!b[0]) return 0;

            for (i = 0; b[i] && !ret; i++) {
                    if (b[i][0] != c && b[i][1] != c) continue;
                    SWAP(b[i], b[0]);
                    ret = can_make_words(b + 1, word + 1);
                    SWAP(b[i], b[0]);
            }

            return ret;
    }

    int main(void)
    {
            char* blocks[] = {
                    "BO", "XK", "DQ", "CP", "NA",
                    "GT", "RE", "TG", "QD", "FS",
                    "JW", "HU", "VI", "AN", "OB",
                    "ER", "FS", "LY", "PC", "ZM",
                    0 };

            char *words[] = {
                    "", "A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "Confuse", 0
            };

            char **w;
            for (w = words; *w; w++)
                    printf("%s\t%d\n", *w, can_make_words(blocks, *w));

            return 0;
    }