A crossword puzzle generator