Babbage Squares

More Details

In the nineteenth century, Charles Babbage popularized this word puzzle: start with a word and write its letters both across and down so that the first letter is shared. This outlines a square grid:

The goal is to fill in the grid with letters to form the same set of words reading across or down. (The words should also appear in the same order.)

Here is an example of a Babbage square that is formed from the difficult starting word "bishop":

Grid[Characters/@{"bishop","impose","sports","hornet","osteal","pestle"}]

You will need the Wolfram Language built-in functions MouseOver and MouseOver.

What Your Function Should Do

Write a function called BabbageSquares that takes a four-letter word and finds all possible Babbage squares that complete it. Your Babbage squares should be presented as sorted grids of letters. Use only common English words—that is, ones that are in WordList[].

BabbageSquares["hair"]

Each square should be a nested list of characters wrapped in Grid:

First[BabbageSquares["hair"]]//InputForm

More Examples

BabbageSquares["zoos"]

BabbageSquares["quad"]

BabbageSquares["dogs"]//Length

BabbageSquares[word_String/; StringLength[word]==4]:=