Hate to tell you this but this code doesn't generate all possible combinations. Upon testing the code and converting it for java I have discovered that is duplicates combinations. I put in the word "abcd" and it generates the same "abcd" twice. It seems to work fine for 3 letter words. There is clearly a bug in the code.