system is for the user to provide data (at least a set of words) to the client, the client sends these data to the server, the server uses these data and constraints to place a subset of these words into a rectangular grid and place a random letter into the grid where no words exist (or leave blank). The server sends this rectangular grid back to the client, i.e., the puzzle; it also returns a second rectangular grid indicating where the actual words are placed, i.e., the puzzle solution.