#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;
}
