Generated on Fri Mar 20 15:55:53 2015 for Gecode by doxygen 1.6.3

crossword.cpp

Go to the documentation of this file.
00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
00002 /*
00003  *  Main authors:
00004  *     Christian Schulte <schulte@gecode.org>
00005  *
00006  *  Copyright:
00007  *     Christian Schulte, 2009
00008  *
00009  *  Last modified:
00010  *     $Date: 2015-03-20 15:37:34 +0100 (Fri, 20 Mar 2015) $ by $Author: schulte $
00011  *     $Revision: 14471 $
00012  *
00013  *  This file is part of Gecode, the generic constraint
00014  *  development environment:
00015  *     http://www.gecode.org
00016  *
00017  *  Permission is hereby granted, free of charge, to any person obtaining
00018  *  a copy of this software and associated documentation files (the
00019  *  "Software"), to deal in the Software without restriction, including
00020  *  without limitation the rights to use, copy, modify, merge, publish,
00021  *  distribute, sublicense, and/or sell copies of the Software, and to
00022  *  permit persons to whom the Software is furnished to do so, subject to
00023  *  the following conditions:
00024  *
00025  *  The above copyright notice and this permission notice shall be
00026  *  included in all copies or substantial portions of the Software.
00027  *
00028  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00029  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00030  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00031  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00032  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00033  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00034  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00035  *
00036  */
00037 
00038 #include <gecode/driver.hh>
00039 
00040 #include <gecode/int.hh>
00041 #include <gecode/minimodel.hh>
00042 
00043 #include "examples/scowl.hpp"
00044 
00045 using namespace Gecode;
00046 
00047 
00048 // Grid data
00049 namespace {
00050   // Grid data
00051   extern const int* grids[];
00052   // Number of grids
00053   extern const unsigned int n_grids;
00054 }
00055 
00056 
00070 class Crossword : public Script {
00071 protected:
00073   const int w;
00075   const int h;
00077   IntVarArray letters;
00078 public:
00080   enum {
00081     BRANCH_WORDS,      
00082     BRANCH_LETTERS,    
00083     BRANCH_LETTERS_ALL 
00084   };
00086   Crossword(const SizeOptions& opt)
00087     : Script(opt), 
00088       w(grids[opt.size()][0]), h(grids[opt.size()][1]),
00089       letters(*this,w*h,'a','z') {
00090     // Pointer into the grid specification (width and height already skipped)
00091     const int* g = &grids[opt.size()][2];
00092 
00093     // Matrix for letters
00094     Matrix<IntVarArray> ml(letters, w, h);
00095 
00096     // Set black fields to 0
00097     {
00098       IntVar z(*this,0,0);
00099       for (int n = *g++; n--; ) {
00100         int x=*g++, y=*g++;
00101         ml(x,y)=z;
00102       }
00103     }
00104 
00105     // Array of all words
00106     IntVarArgs allwords;
00107 
00108     // While words of length w_l to process
00109     while (int w_l=*g++) {
00110       // Number of words of that length in the dictionary
00111       int n_w = dict.words(w_l);
00112       // Number of words of that length in the puzzle
00113       int n=*g++;
00114 
00115       if (n > n_w) {
00116         fail();
00117       } else {
00118         // Array of all words of length w_l
00119         IntVarArgs words(*this,n,0,n_w-1);
00120         allwords << words;
00121         
00122         // All words of same length must be different
00123         distinct(*this, words, opt.icl());
00124         
00125         for (int d=0; d<w_l; d++) {
00126           // Array that maps words to a letter at a certain position (shared among all element constraints)
00127           IntSharedArray w2l(n_w);
00128           // Initialize word to letter map
00129           for (int i=n_w; i--; )
00130             w2l[i] = dict.word(w_l,i)[d];
00131           // Link word to letter variable
00132           for (int i=0; i<n; i++) {
00133             // Get (x,y) coordinate where word begins
00134             int x=g[3*i+0], y=g[3*i+1];
00135             // Whether word is horizontal
00136             bool h=(g[3*i+2] == 0);
00137             // Constrain the letters to the words' letters
00138             element(*this, w2l, words[i], h ? ml(x+d,y) : ml(x,y+d));
00139           }
00140         }
00141         // Skip word coordinates
00142         g += 3*n;
00143       }
00144     }
00145     switch (opt.branching()) {
00146     case BRANCH_WORDS:
00147       // Branch by assigning words
00148       branch(*this, allwords, 
00149              INT_VAR_AFC_SIZE_MAX(opt.decay()), INT_VAL_SPLIT_MIN(),
00150              NULL, &printwords);
00151       break;
00152     case BRANCH_LETTERS:
00153       // Branch by assigning letters
00154       branch(*this, letters, 
00155              INT_VAR_AFC_SIZE_MAX(opt.decay()), INT_VAL_MIN(),
00156              NULL, &printletters);
00157       break;
00158     case BRANCH_LETTERS_ALL:
00159       // Branch by assigning letters (try all letters)
00160       branch(*this, letters, 
00161              INT_VAR_AFC_SIZE_MAX(opt.decay()), INT_VALUES_MIN(),
00162              NULL, &printletters);
00163       break;
00164     }
00165   }
00167   static void printletters(const Space& home, const BrancherHandle&,
00168                            unsigned int a,
00169                            IntVar, int i, const int& n,
00170                            std::ostream& o) {
00171     const Crossword& c = static_cast<const Crossword&>(home);
00172     int x = i % c.w, y = i / c.w;
00173     o << "letters[" << x << "," << y << "] "
00174       << ((a == 0) ? "=" : "!=") << " "
00175       << static_cast<char>(n);
00176   }
00178   static void printwords(const Space&, const BrancherHandle&,
00179                          unsigned int a,
00180                          IntVar, int i, const int& n,
00181                          std::ostream& o) {
00182     o << "allwords[" << i << "] "
00183       << ((a == 0) ? "<=" : ">") << " "
00184       << n;
00185   }
00187   bool master(const CRI& cri) {
00188     // Post no-goods
00189     cri.nogoods().post(*this);
00190     // Do not perform a restart if a solution has been found
00191     return false;
00192   }
00193 
00195   Crossword(bool share, Crossword& s) 
00196     : Script(share,s), w(s.w), h(s.h) {
00197     letters.update(*this, share, s.letters);
00198   }
00200   virtual Space*
00201   copy(bool share) {
00202     return new Crossword(share,*this);
00203   }
00205   virtual void
00206   print(std::ostream& os) const {
00207     // Matrix for letters
00208     Matrix<IntVarArray> ml(letters, w, h);
00209     for (int i=0; i<h; i++) {
00210       os << '\t';
00211       for (int j=0; j<w; j++)
00212         if (ml(j,i).assigned())
00213           if (ml(j,i).val() == 0)
00214             os << '*';
00215           else
00216             os << static_cast<char>(ml(j,i).val());
00217         else
00218           os << '?';
00219       os << std::endl;
00220     }
00221     os << std::endl << std::endl;
00222   }
00223 };
00224 
00225 
00229 int
00230 main(int argc, char* argv[]) {
00231   FileSizeOptions opt("Crossword");
00232   opt.size(10);
00233   opt.icl(ICL_VAL);
00234   opt.branching(Crossword::BRANCH_WORDS);
00235   opt.branching(Crossword::BRANCH_WORDS, "words");
00236   opt.branching(Crossword::BRANCH_LETTERS, "letters");
00237   opt.branching(Crossword::BRANCH_LETTERS_ALL, "letters-all");
00238   opt.parse(argc,argv);
00239   dict.init(opt.file());
00240   if (opt.size() >= n_grids) {
00241     std::cerr << "Error: size must be between 0 and "
00242               << n_grids-1 << std::endl;
00243     return 1;
00244   }
00245   Script::run<Crossword,DFS,SizeOptions>(opt);
00246   return 0;
00247 }
00248 
00249 namespace {
00250 
00251   /* 
00252    * The Grid data has been provided by Peter Van Beek, to
00253    * quote the original README.txt:
00254    *
00255    * The files in this directory contain templates for crossword
00256    * puzzles. Each is a two-dimensional array. A _ indicates
00257    * that the associated square in the crossword template is
00258    * blank, and a * indicates that it is a black square that
00259    * does not need to have a letter inserted.
00260    *
00261    * The crossword puzzles templates came from the following
00262    * sources:
00263    *
00264    *    15.01, ..., 15.10
00265    *    19.01, ..., 19.10
00266    *    21.01, ..., 21.10
00267    *    23.01, ..., 23.10
00268    *
00269    *    Herald Tribune Crosswords, Spring, 1999
00270    *
00271    *    05.01, ..., 05.10
00272    *
00273    *    All legal 5 x 5 puzzles.
00274    *
00275    *    puzzle01, ..., puzzle19
00276    *
00277    *    Ginsberg, M.L., "Dynamic Backtracking," 
00278    *    Journal of Artificial Intelligence Researc (JAIR)
00279    *    Volume 1, pages 25-46, 1993.
00280    *
00281    *    puzzle20, ..., puzzle22
00282    *
00283    *    Ginsberg, M.L. et al., "Search Lessons Learned
00284    *    from Crossword Puzzles," AAAI-90, pages 210-215. 
00285    *
00286    */
00287 
00288   /*
00289    * Name: 05.01, 5 x 5
00290    *    (_ _ _ _ _)
00291    *    (_ _ _ _ _)
00292    *    (_ _ _ _ _)
00293    *    (_ _ _ _ _)
00294    *    (_ _ _ _ _)
00295    */
00296   const int g0[] = {
00297     // Width and height of crossword grid
00298     5, 5,
00299     // Number of black fields
00300     0,
00301     // Black field coordinates
00302     
00303     // Length and number of words of that length
00304     5, 10,
00305     // Coordinates where words start and direction (0 = horizontal)
00306     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,3,0, 0,4,0, 1,0,1, 2,0,1, 3,0,1, 4,0,1, 
00307     // End marker
00308     0
00309   };
00310 
00311 
00312   /*
00313    * Name: 05.02, 5 x 5
00314    *    (_ _ _ _ *)
00315    *    (_ _ _ _ _)
00316    *    (_ _ _ _ _)
00317    *    (_ _ _ _ _)
00318    *    (* _ _ _ _)
00319    */
00320   const int g1[] = {
00321     // Width and height of crossword grid
00322     5, 5,
00323     // Number of black fields
00324     2,
00325     // Black field coordinates
00326     0,4, 4,0, 
00327     // Length and number of words of that length
00328     5, 6,
00329     // Coordinates where words start and direction (0 = horizontal)
00330     0,1,0, 0,2,0, 0,3,0, 1,0,1, 2,0,1, 3,0,1, 
00331     // Length and number of words of that length
00332     4, 4,
00333     // Coordinates where words start and direction (0 = horizontal)
00334     0,0,0, 0,0,1, 1,4,0, 4,1,1, 
00335     // End marker
00336     0
00337   };
00338 
00339 
00340   /*
00341    * Name: 05.03, 5 x 5
00342    *    (_ _ _ _ *)
00343    *    (_ _ _ _ *)
00344    *    (_ _ _ _ _)
00345    *    (* _ _ _ _)
00346    *    (* _ _ _ _)
00347    */
00348   const int g2[] = {
00349     // Width and height of crossword grid
00350     5, 5,
00351     // Number of black fields
00352     4,
00353     // Black field coordinates
00354     0,3, 0,4, 4,0, 4,1, 
00355     // Length and number of words of that length
00356     5, 4,
00357     // Coordinates where words start and direction (0 = horizontal)
00358     0,2,0, 1,0,1, 2,0,1, 3,0,1, 
00359     // Length and number of words of that length
00360     4, 4,
00361     // Coordinates where words start and direction (0 = horizontal)
00362     0,0,0, 0,1,0, 1,3,0, 1,4,0, 
00363     // Length and number of words of that length
00364     3, 2,
00365     // Coordinates where words start and direction (0 = horizontal)
00366     0,0,1, 4,2,1, 
00367     // End marker
00368     0
00369   };
00370 
00371 
00372   /*
00373    * Name: 05.04, 5 x 5
00374    *    (_ _ _ * *)
00375    *    (_ _ _ _ *)
00376    *    (_ _ _ _ _)
00377    *    (* _ _ _ _)
00378    *    (* * _ _ _)
00379    */
00380   const int g3[] = {
00381     // Width and height of crossword grid
00382     5, 5,
00383     // Number of black fields
00384     6,
00385     // Black field coordinates
00386     0,3, 0,4, 1,4, 3,0, 4,0, 4,1, 
00387     // Length and number of words of that length
00388     5, 2,
00389     // Coordinates where words start and direction (0 = horizontal)
00390     0,2,0, 2,0,1, 
00391     // Length and number of words of that length
00392     4, 4,
00393     // Coordinates where words start and direction (0 = horizontal)
00394     0,1,0, 1,0,1, 1,3,0, 3,1,1, 
00395     // Length and number of words of that length
00396     3, 4,
00397     // Coordinates where words start and direction (0 = horizontal)
00398     0,0,0, 0,0,1, 2,4,0, 4,2,1, 
00399     // End marker
00400     0
00401   };
00402 
00403 
00404   /*
00405    * Name: 05.05, 5 x 5
00406    *    (_ _ _ * *)
00407    *    (_ _ _ * *)
00408    *    (_ _ _ _ _)
00409    *    (* * _ _ _)
00410    *    (* * _ _ _)
00411    */
00412   const int g4[] = {
00413     // Width and height of crossword grid
00414     5, 5,
00415     // Number of black fields
00416     8,
00417     // Black field coordinates
00418     0,3, 0,4, 1,3, 1,4, 3,0, 3,1, 4,0, 4,1, 
00419     // Length and number of words of that length
00420     5, 2,
00421     // Coordinates where words start and direction (0 = horizontal)
00422     0,2,0, 2,0,1, 
00423     // Length and number of words of that length
00424     3, 8,
00425     // Coordinates where words start and direction (0 = horizontal)
00426     0,0,0, 0,0,1, 0,1,0, 1,0,1, 2,3,0, 2,4,0, 3,2,1, 4,2,1, 
00427     // End marker
00428     0
00429   };
00430 
00431 
00432   /*
00433    * Name: 05.06, 5 x 5
00434    *    (* _ _ _ _)
00435    *    (_ _ _ _ _)
00436    *    (_ _ _ _ _)
00437    *    (_ _ _ _ _)
00438    *    (_ _ _ _ *)
00439    */
00440   const int g5[] = {
00441     // Width and height of crossword grid
00442     5, 5,
00443     // Number of black fields
00444     2,
00445     // Black field coordinates
00446     0,0, 4,4, 
00447     // Length and number of words of that length
00448     5, 6,
00449     // Coordinates where words start and direction (0 = horizontal)
00450     0,1,0, 0,2,0, 0,3,0, 1,0,1, 2,0,1, 3,0,1, 
00451     // Length and number of words of that length
00452     4, 4,
00453     // Coordinates where words start and direction (0 = horizontal)
00454     0,1,1, 0,4,0, 1,0,0, 4,0,1, 
00455     // End marker
00456     0
00457   };
00458 
00459 
00460   /*
00461    * Name: 05.07, 5 x 5
00462    *    (* _ _ _ _)
00463    *    (* _ _ _ _)
00464    *    (_ _ _ _ _)
00465    *    (_ _ _ _ *)
00466    *    (_ _ _ _ *)
00467    */
00468   const int g6[] = {
00469     // Width and height of crossword grid
00470     5, 5,
00471     // Number of black fields
00472     4,
00473     // Black field coordinates
00474     0,0, 0,1, 4,3, 4,4, 
00475     // Length and number of words of that length
00476     5, 4,
00477     // Coordinates where words start and direction (0 = horizontal)
00478     0,2,0, 1,0,1, 2,0,1, 3,0,1, 
00479     // Length and number of words of that length
00480     4, 4,
00481     // Coordinates where words start and direction (0 = horizontal)
00482     0,3,0, 0,4,0, 1,0,0, 1,1,0, 
00483     // Length and number of words of that length
00484     3, 2,
00485     // Coordinates where words start and direction (0 = horizontal)
00486     0,2,1, 4,0,1, 
00487     // End marker
00488     0
00489   };
00490 
00491 
00492   /*
00493    * Name: 05.08, 5 x 5
00494    *    (* _ _ _ *)
00495    *    (_ _ _ _ _)
00496    *    (_ _ _ _ _)
00497    *    (_ _ _ _ _)
00498    *    (* _ _ _ *)
00499    */
00500   const int g7[] = {
00501     // Width and height of crossword grid
00502     5, 5,
00503     // Number of black fields
00504     4,
00505     // Black field coordinates
00506     0,0, 0,4, 4,0, 4,4, 
00507     // Length and number of words of that length
00508     5, 6,
00509     // Coordinates where words start and direction (0 = horizontal)
00510     0,1,0, 0,2,0, 0,3,0, 1,0,1, 2,0,1, 3,0,1, 
00511     // Length and number of words of that length
00512     3, 4,
00513     // Coordinates where words start and direction (0 = horizontal)
00514     0,1,1, 1,0,0, 1,4,0, 4,1,1, 
00515     // End marker
00516     0
00517   };
00518 
00519 
00520   /*
00521    * Name: 05.09, 5 x 5
00522    *    (* * _ _ _)
00523    *    (* _ _ _ _)
00524    *    (_ _ _ _ _)
00525    *    (_ _ _ _ *)
00526    *    (_ _ _ * *)
00527    */
00528   const int g8[] = {
00529     // Width and height of crossword grid
00530     5, 5,
00531     // Number of black fields
00532     6,
00533     // Black field coordinates
00534     0,0, 0,1, 1,0, 3,4, 4,3, 4,4, 
00535     // Length and number of words of that length
00536     5, 2,
00537     // Coordinates where words start and direction (0 = horizontal)
00538     0,2,0, 2,0,1, 
00539     // Length and number of words of that length
00540     4, 4,
00541     // Coordinates where words start and direction (0 = horizontal)
00542     0,3,0, 1,1,0, 1,1,1, 3,0,1, 
00543     // Length and number of words of that length
00544     3, 4,
00545     // Coordinates where words start and direction (0 = horizontal)
00546     0,2,1, 0,4,0, 2,0,0, 4,0,1, 
00547     // End marker
00548     0
00549   };
00550 
00551 
00552   /*
00553    * Name: 05.10, 5 x 5
00554    *    (* * _ _ _)
00555    *    (* * _ _ _)
00556    *    (_ _ _ _ _)
00557    *    (_ _ _ * *)
00558    *    (_ _ _ * *)
00559    */
00560   const int g9[] = {
00561     // Width and height of crossword grid
00562     5, 5,
00563     // Number of black fields
00564     8,
00565     // Black field coordinates
00566     0,0, 0,1, 1,0, 1,1, 3,3, 3,4, 4,3, 4,4, 
00567     // Length and number of words of that length
00568     5, 2,
00569     // Coordinates where words start and direction (0 = horizontal)
00570     0,2,0, 2,0,1, 
00571     // Length and number of words of that length
00572     3, 8,
00573     // Coordinates where words start and direction (0 = horizontal)
00574     0,2,1, 0,3,0, 0,4,0, 1,2,1, 2,0,0, 2,1,0, 3,0,1, 4,0,1, 
00575     // End marker
00576     0
00577   };
00578 
00579 
00580   /*
00581    * Name: 15.01, 15 x 15
00582    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00583    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00584    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
00585    *    (_ _ _ _ _ _ _ * * _ _ _ _ _ _)
00586    *    (* * * _ _ _ * _ _ _ _ _ _ * *)
00587    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
00588    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _)
00589    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _)
00590    *    (_ _ _ _ * _ _ _ _ _ _ * _ _ _)
00591    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
00592    *    (* * _ _ _ _ _ _ * _ _ _ * * *)
00593    *    (_ _ _ _ _ _ * * _ _ _ _ _ _ _)
00594    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
00595    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00596    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00597    */
00598   const int g10[] = {
00599     // Width and height of crossword grid
00600     15, 15,
00601     // Number of black fields
00602     36,
00603     // Black field coordinates
00604     0,4, 0,10, 1,4, 1,10, 2,4, 3,6, 3,7, 4,0, 4,1, 4,8, 4,12, 4,13, 4,14, 5,5, 5,9, 6,4, 6,11, 7,3, 7,11, 8,3, 8,10, 9,5, 9,9, 10,0, 10,1, 10,2, 10,6, 10,13, 10,14, 11,7, 11,8, 12,10, 13,4, 13,10, 14,4, 14,10, 
00605     // Length and number of words of that length
00606     10, 4,
00607     // Coordinates where words start and direction (0 = horizontal)
00608     0,2,0, 2,5,1, 5,12,0, 12,0,1, 
00609     // Length and number of words of that length
00610     7, 6,
00611     // Coordinates where words start and direction (0 = horizontal)
00612     0,3,0, 3,8,1, 4,7,0, 7,4,1, 8,11,0, 11,0,1, 
00613     // Length and number of words of that length
00614     6, 12,
00615     // Coordinates where words start and direction (0 = horizontal)
00616     0,11,0, 2,10,0, 3,0,1, 4,2,1, 4,6,0, 5,8,0, 6,5,1, 7,4,0, 8,4,1, 9,3,0, 10,7,1, 11,9,1, 
00617     // Length and number of words of that length
00618     5, 16,
00619     // Coordinates where words start and direction (0 = horizontal)
00620     0,5,0, 0,5,1, 0,9,0, 1,5,1, 5,0,0, 5,0,1, 5,1,0, 5,10,1, 5,13,0, 5,14,0, 9,0,1, 9,10,1, 10,5,0, 10,9,0, 13,5,1, 14,5,1, 
00621     // Length and number of words of that length
00622     4, 24,
00623     // Coordinates where words start and direction (0 = horizontal)
00624     0,0,0, 0,0,1, 0,1,0, 0,8,0, 0,11,1, 0,12,0, 0,13,0, 0,14,0, 1,0,1, 1,11,1, 2,0,1, 6,0,1, 8,11,1, 11,0,0, 11,1,0, 11,2,0, 11,6,0, 11,13,0, 11,14,0, 12,11,1, 13,0,1, 13,11,1, 14,0,1, 14,11,1, 
00625     // Length and number of words of that length
00626     3, 16,
00627     // Coordinates where words start and direction (0 = horizontal)
00628     0,6,0, 0,7,0, 3,4,0, 4,9,1, 5,6,1, 6,5,0, 6,9,0, 6,12,1, 7,0,1, 7,12,1, 8,0,1, 9,6,1, 9,10,0, 10,3,1, 12,7,0, 12,8,0, 
00629     // End marker
00630     0
00631   };
00632 
00633 
00634   /*
00635    * Name: 15.02, 15 x 15
00636    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
00637    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
00638    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
00639    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
00640    *    (_ _ _ * _ _ _ _ * _ _ _ * * *)
00641    *    (* * * _ _ _ _ * _ _ _ * _ _ _)
00642    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ _)
00643    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
00644    *    (_ _ _ _ * _ _ _ * _ _ _ _ _ _)
00645    *    (_ _ _ * _ _ _ * _ _ _ _ * * *)
00646    *    (* * * _ _ _ * _ _ _ _ * _ _ _)
00647    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
00648    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
00649    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
00650    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
00651    */
00652   const int g11[] = {
00653     // Width and height of crossword grid
00654     15, 15,
00655     // Number of black fields
00656     34,
00657     // Black field coordinates
00658     0,5, 0,10, 1,5, 1,10, 2,5, 2,10, 3,4, 3,9, 4,3, 4,8, 4,13, 4,14, 5,0, 5,7, 6,6, 6,10, 7,5, 7,9, 8,4, 8,8, 9,7, 9,14, 10,0, 10,1, 10,6, 10,11, 11,5, 11,10, 12,4, 12,9, 13,4, 13,9, 14,4, 14,9, 
00659     // Length and number of words of that length
00660     15, 2,
00661     // Coordinates where words start and direction (0 = horizontal)
00662     0,2,0, 0,12,0, 
00663     // Length and number of words of that length
00664     10, 4,
00665     // Coordinates where words start and direction (0 = horizontal)
00666     0,1,0, 0,11,0, 5,3,0, 5,13,0, 
00667     // Length and number of words of that length
00668     7, 2,
00669     // Coordinates where words start and direction (0 = horizontal)
00670     5,8,1, 9,0,1, 
00671     // Length and number of words of that length
00672     6, 6,
00673     // Coordinates where words start and direction (0 = horizontal)
00674     0,6,0, 5,1,1, 6,0,1, 8,9,1, 9,8,0, 9,8,1, 
00675     // Length and number of words of that length
00676     5, 14,
00677     // Coordinates where words start and direction (0 = horizontal)
00678     0,0,0, 0,0,1, 0,7,0, 1,0,1, 2,0,1, 3,10,1, 7,0,1, 7,10,1, 10,7,0, 10,14,0, 11,0,1, 12,10,1, 13,10,1, 14,10,1, 
00679     // Length and number of words of that length
00680     4, 36,
00681     // Coordinates where words start and direction (0 = horizontal)
00682     0,3,0, 0,6,1, 0,8,0, 0,11,1, 0,13,0, 0,14,0, 1,6,1, 1,11,1, 2,6,1, 2,11,1, 3,0,1, 3,5,0, 3,5,1, 4,4,0, 4,4,1, 4,9,1, 5,14,0, 6,0,0, 6,11,1, 7,10,0, 8,0,1, 8,9,0, 10,2,1, 10,7,1, 11,0,0, 11,1,0, 11,6,0, 11,6,1, 11,11,0, 11,11,1, 12,0,1, 12,5,1, 13,0,1, 13,5,1, 14,0,1, 14,5,1, 
00683     // Length and number of words of that length
00684     3, 16,
00685     // Coordinates where words start and direction (0 = horizontal)
00686     0,4,0, 0,9,0, 3,10,0, 4,0,1, 4,9,0, 5,8,0, 6,7,0, 6,7,1, 7,6,0, 7,6,1, 8,5,0, 8,5,1, 9,4,0, 10,12,1, 12,5,0, 12,10,0, 
00687     // End marker
00688     0
00689   };
00690 
00691 
00692   /*
00693    * Name: 15.03, 15 x 15
00694    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00695    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00696    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00697    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ _)
00698    *    (* * * _ _ _ _ * _ _ _ _ * * *)
00699    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ _)
00700    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _)
00701    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00702    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _)
00703    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ _)
00704    *    (* * * _ _ _ _ * _ _ _ _ * * *)
00705    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ _)
00706    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00707    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00708    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00709    */
00710   const int g12[] = {
00711     // Width and height of crossword grid
00712     15, 15,
00713     // Number of black fields
00714     36,
00715     // Black field coordinates
00716     0,4, 0,10, 1,4, 1,10, 2,4, 2,10, 3,8, 4,0, 4,1, 4,2, 4,7, 4,12, 4,13, 4,14, 5,6, 6,5, 6,11, 7,4, 7,10, 8,3, 8,9, 9,8, 10,0, 10,1, 10,2, 10,7, 10,12, 10,13, 10,14, 11,6, 12,4, 12,10, 13,4, 13,10, 14,4, 14,10, 
00717     // Length and number of words of that length
00718     8, 8,
00719     // Coordinates where words start and direction (0 = horizontal)
00720     0,3,0, 0,9,0, 3,0,1, 5,7,1, 7,5,0, 7,11,0, 9,0,1, 11,7,1, 
00721     // Length and number of words of that length
00722     6, 8,
00723     // Coordinates where words start and direction (0 = horizontal)
00724     0,5,0, 0,11,0, 3,9,1, 5,0,1, 9,3,0, 9,9,0, 9,9,1, 11,0,1, 
00725     // Length and number of words of that length
00726     5, 22,
00727     // Coordinates where words start and direction (0 = horizontal)
00728     0,5,1, 0,6,0, 1,5,1, 2,5,1, 4,8,0, 5,0,0, 5,1,0, 5,2,0, 5,7,0, 5,12,0, 5,13,0, 5,14,0, 6,0,1, 6,6,0, 6,6,1, 7,5,1, 8,4,1, 8,10,1, 10,8,0, 12,5,1, 13,5,1, 14,5,1, 
00729     // Length and number of words of that length
00730     4, 36,
00731     // Coordinates where words start and direction (0 = horizontal)
00732     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,7,0, 0,11,1, 0,12,0, 0,13,0, 0,14,0, 1,0,1, 1,11,1, 2,0,1, 2,11,1, 3,4,0, 3,10,0, 4,3,1, 4,8,1, 7,0,1, 7,11,1, 8,4,0, 8,10,0, 10,3,1, 10,8,1, 11,0,0, 11,1,0, 11,2,0, 11,7,0, 11,12,0, 11,13,0, 11,14,0, 12,0,1, 12,11,1, 13,0,1, 13,11,1, 14,0,1, 14,11,1, 
00733     // Length and number of words of that length
00734     3, 4,
00735     // Coordinates where words start and direction (0 = horizontal)
00736     0,8,0, 6,12,1, 8,0,1, 12,6,0, 
00737     // End marker
00738     0
00739   };
00740 
00741 
00742   /*
00743    * Name: 15.04, 15 x 15
00744    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ _)
00745    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ _)
00746    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
00747    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _)
00748    *    (* * * _ _ _ * _ _ _ _ _ * * *)
00749    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _)
00750    *    (_ _ _ _ * _ _ _ * _ _ _ _ _ _)
00751    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
00752    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ _)
00753    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _)
00754    *    (* * * _ _ _ _ _ * _ _ _ * * *)
00755    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _)
00756    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
00757    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ _)
00758    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _)
00759    */
00760   const int g13[] = {
00761     // Width and height of crossword grid
00762     15, 15,
00763     // Number of black fields
00764     32,
00765     // Black field coordinates
00766     0,4, 0,10, 1,4, 1,10, 2,4, 2,10, 3,0, 3,5, 3,11, 4,6, 5,3, 5,9, 6,4, 6,8, 6,13, 6,14, 8,0, 8,1, 8,6, 8,10, 9,5, 9,11, 10,8, 11,3, 11,9, 11,14, 12,4, 12,10, 13,4, 13,10, 14,4, 14,10, 
00767     // Length and number of words of that length
00768     15, 4,
00769     // Coordinates where words start and direction (0 = horizontal)
00770     0,2,0, 0,7,0, 0,12,0, 7,0,1, 
00771     // Length and number of words of that length
00772     8, 4,
00773     // Coordinates where words start and direction (0 = horizontal)
00774     0,1,0, 4,7,1, 7,13,0, 10,0,1, 
00775     // Length and number of words of that length
00776     6, 8,
00777     // Coordinates where words start and direction (0 = horizontal)
00778     0,8,0, 0,13,0, 0,14,0, 4,0,1, 9,0,0, 9,1,0, 9,6,0, 10,9,1, 
00779     // Length and number of words of that length
00780     5, 22,
00781     // Coordinates where words start and direction (0 = horizontal)
00782     0,3,0, 0,5,1, 0,9,0, 1,5,1, 2,5,1, 3,6,1, 3,10,0, 4,5,0, 4,11,0, 5,4,1, 5,10,1, 6,3,0, 6,9,0, 7,4,0, 9,0,1, 9,6,1, 10,5,0, 10,11,0, 11,4,1, 12,5,1, 13,5,1, 14,5,1, 
00783     // Length and number of words of that length
00784     4, 22,
00785     // Coordinates where words start and direction (0 = horizontal)
00786     0,0,1, 0,6,0, 0,11,1, 1,0,1, 1,11,1, 2,0,1, 2,11,1, 3,1,1, 4,0,0, 6,0,1, 6,9,1, 7,14,0, 8,2,1, 8,11,1, 11,8,0, 11,10,1, 12,0,1, 12,11,1, 13,0,1, 13,11,1, 14,0,1, 14,11,1, 
00787     // Length and number of words of that length
00788     3, 16,
00789     // Coordinates where words start and direction (0 = horizontal)
00790     0,0,0, 0,5,0, 0,11,0, 3,4,0, 3,12,1, 5,0,1, 5,6,0, 6,5,1, 7,8,0, 8,7,1, 9,10,0, 9,12,1, 11,0,1, 12,3,0, 12,9,0, 12,14,0, 
00791     // End marker
00792     0
00793   };
00794 
00795 
00796   /*
00797    * Name: 15.05, 15 x 15
00798    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
00799    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
00800    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
00801    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00802    *    (* * * * _ _ _ * * * _ _ _ _ _)
00803    *    (_ _ _ _ _ _ * _ _ _ _ * * * *)
00804    *    (_ _ _ _ _ * * _ _ _ _ _ _ _ *)
00805    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
00806    *    (* _ _ _ _ _ _ _ * * _ _ _ _ _)
00807    *    (* * * * _ _ _ _ * _ _ _ _ _ _)
00808    *    (_ _ _ _ _ * * * _ _ _ * * * *)
00809    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00810    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
00811    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
00812    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
00813    */
00814   const int g14[] = {
00815     // Width and height of crossword grid
00816     15, 15,
00817     // Number of black fields
00818     44,
00819     // Black field coordinates
00820     0,4, 0,8, 0,9, 1,4, 1,9, 2,4, 2,9, 3,4, 3,9, 4,3, 4,11, 4,12, 4,13, 4,14, 5,0, 5,1, 5,6, 5,10, 6,5, 6,6, 6,10, 7,4, 7,10, 8,4, 8,8, 8,9, 9,4, 9,8, 9,13, 9,14, 10,0, 10,1, 10,2, 10,3, 10,11, 11,5, 11,10, 12,5, 12,10, 13,5, 13,10, 14,5, 14,6, 14,10, 
00821     // Length and number of words of that length
00822     15, 1,
00823     // Coordinates where words start and direction (0 = horizontal)
00824     0,7,0, 
00825     // Length and number of words of that length
00826     10, 2,
00827     // Coordinates where words start and direction (0 = horizontal)
00828     0,2,0, 5,12,0, 
00829     // Length and number of words of that length
00830     7, 4,
00831     // Coordinates where words start and direction (0 = horizontal)
00832     1,8,0, 4,4,1, 7,6,0, 10,4,1, 
00833     // Length and number of words of that length
00834     6, 2,
00835     // Coordinates where words start and direction (0 = horizontal)
00836     0,5,0, 9,9,0, 
00837     // Length and number of words of that length
00838     5, 21,
00839     // Coordinates where words start and direction (0 = horizontal)
00840     0,0,0, 0,1,0, 0,6,0, 0,10,0, 0,10,1, 1,10,1, 2,10,1, 3,10,1, 5,3,0, 5,11,0, 6,0,1, 7,5,1, 8,10,1, 10,4,0, 10,8,0, 10,13,0, 10,14,0, 11,0,1, 12,0,1, 13,0,1, 14,0,1, 
00841     // Length and number of words of that length
00842     4, 38,
00843     // Coordinates where words start and direction (0 = horizontal)
00844     0,0,1, 0,3,0, 0,11,0, 0,12,0, 0,13,0, 0,14,0, 1,0,1, 1,5,1, 2,0,1, 2,5,1, 3,0,1, 3,5,1, 4,9,0, 5,2,1, 5,11,1, 5,13,0, 5,14,0, 6,0,0, 6,1,0, 6,11,1, 7,0,1, 7,5,0, 7,11,1, 8,0,1, 9,0,1, 9,9,1, 11,0,0, 11,1,0, 11,2,0, 11,3,0, 11,6,1, 11,11,0, 11,11,1, 12,6,1, 12,11,1, 13,6,1, 13,11,1, 14,11,1, 
00845     // Length and number of words of that length
00846     3, 10,
00847     // Coordinates where words start and direction (0 = horizontal)
00848     0,5,1, 4,0,1, 4,4,0, 5,7,1, 6,7,1, 8,5,1, 8,10,0, 9,5,1, 10,12,1, 14,7,1, 
00849     // End marker
00850     0
00851   };
00852 
00853 
00854   /*
00855    * Name: 15.06, 15 x 15
00856    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00857    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00858    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00859    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00860    *    (* * * _ _ _ * _ _ _ _ _ * * *)
00861    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ _)
00862    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ _)
00863    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _)
00864    *    (_ _ _ _ _ * _ _ _ _ _ _ _ _ _)
00865    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ _)
00866    *    (* * * _ _ _ _ _ * _ _ _ * * *)
00867    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
00868    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00869    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00870    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00871    */
00872   const int g15[] = {
00873     // Width and height of crossword grid
00874     15, 15,
00875     // Number of black fields
00876     30,
00877     // Black field coordinates
00878     0,4, 0,10, 1,4, 1,10, 2,4, 2,10, 3,7, 4,3, 4,11, 5,8, 6,4, 6,9, 7,0, 7,1, 7,2, 7,12, 7,13, 7,14, 8,5, 8,10, 9,6, 10,3, 10,11, 11,7, 12,4, 12,10, 13,4, 13,10, 14,4, 14,10, 
00879     // Length and number of words of that length
00880     9, 3,
00881     // Coordinates where words start and direction (0 = horizontal)
00882     0,6,0, 6,8,0, 7,3,1, 
00883     // Length and number of words of that length
00884     8, 4,
00885     // Coordinates where words start and direction (0 = horizontal)
00886     0,5,0, 5,0,1, 7,9,0, 9,7,1, 
00887     // Length and number of words of that length
00888     7, 19,
00889     // Coordinates where words start and direction (0 = horizontal)
00890     0,0,0, 0,1,0, 0,2,0, 0,12,0, 0,13,0, 0,14,0, 3,0,1, 3,8,1, 4,4,1, 4,7,0, 8,0,0, 8,1,0, 8,2,0, 8,12,0, 8,13,0, 8,14,0, 10,4,1, 11,0,1, 11,8,1, 
00891     // Length and number of words of that length
00892     6, 4,
00893     // Coordinates where words start and direction (0 = horizontal)
00894     0,9,0, 5,9,1, 9,0,1, 9,5,0, 
00895     // Length and number of words of that length
00896     5, 14,
00897     // Coordinates where words start and direction (0 = horizontal)
00898     0,5,1, 0,8,0, 1,5,1, 2,5,1, 3,10,0, 5,3,0, 5,11,0, 6,10,1, 7,4,0, 8,0,1, 10,6,0, 12,5,1, 13,5,1, 14,5,1, 
00899     // Length and number of words of that length
00900     4, 20,
00901     // Coordinates where words start and direction (0 = horizontal)
00902     0,0,1, 0,3,0, 0,11,0, 0,11,1, 1,0,1, 1,11,1, 2,0,1, 2,11,1, 6,0,1, 6,5,1, 8,6,1, 8,11,1, 11,3,0, 11,11,0, 12,0,1, 12,11,1, 13,0,1, 13,11,1, 14,0,1, 14,11,1, 
00903     // Length and number of words of that length
00904     3, 8,
00905     // Coordinates where words start and direction (0 = horizontal)
00906     0,7,0, 3,4,0, 4,0,1, 4,12,1, 9,10,0, 10,0,1, 10,12,1, 12,7,0, 
00907     // End marker
00908     0
00909   };
00910 
00911 
00912   /*
00913    * Name: 15.07, 15 x 15
00914    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
00915    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
00916    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ _)
00917    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00918    *    (* * _ _ _ _ * _ _ _ * _ _ _ _)
00919    *    (_ _ _ _ _ * _ _ _ _ _ _ * * *)
00920    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
00921    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _)
00922    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
00923    *    (* * * _ _ _ _ _ _ * _ _ _ _ _)
00924    *    (_ _ _ _ * _ _ _ * _ _ _ _ * *)
00925    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00926    *    (_ _ _ _ _ * _ _ _ _ _ _ _ _ _)
00927    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
00928    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
00929    */
00930   const int g16[] = {
00931     // Width and height of crossword grid
00932     15, 15,
00933     // Number of black fields
00934     32,
00935     // Black field coordinates
00936     0,4, 0,9, 1,4, 1,9, 2,9, 3,7, 4,0, 4,1, 4,6, 4,10, 5,5, 5,12, 5,13, 5,14, 6,4, 7,3, 7,11, 8,10, 9,0, 9,1, 9,2, 9,9, 10,4, 10,8, 10,13, 10,14, 11,7, 12,5, 13,5, 13,10, 14,5, 14,10, 
00937     // Length and number of words of that length
00938     10, 4,
00939     // Coordinates where words start and direction (0 = horizontal)
00940     0,8,0, 5,6,0, 6,5,1, 8,0,1, 
00941     // Length and number of words of that length
00942     9, 4,
00943     // Coordinates where words start and direction (0 = horizontal)
00944     0,2,0, 2,0,1, 6,12,0, 12,6,1, 
00945     // Length and number of words of that length
00946     7, 10,
00947     // Coordinates where words start and direction (0 = horizontal)
00948     0,3,0, 0,11,0, 3,0,1, 3,8,1, 4,7,0, 7,4,1, 8,3,0, 8,11,0, 11,0,1, 11,8,1, 
00949     // Length and number of words of that length
00950     6, 4,
00951     // Coordinates where words start and direction (0 = horizontal)
00952     3,9,0, 5,6,1, 6,5,0, 9,3,1, 
00953     // Length and number of words of that length
00954     5, 16,
00955     // Coordinates where words start and direction (0 = horizontal)
00956     0,5,0, 0,10,1, 0,12,0, 0,13,0, 0,14,0, 1,10,1, 2,10,1, 5,0,1, 9,10,1, 10,0,0, 10,1,0, 10,2,0, 10,9,0, 12,0,1, 13,0,1, 14,0,1, 
00957     // Length and number of words of that length
00958     4, 28,
00959     // Coordinates where words start and direction (0 = horizontal)
00960     0,0,0, 0,0,1, 0,1,0, 0,5,1, 0,6,0, 0,10,0, 1,0,1, 1,5,1, 2,4,0, 4,2,1, 4,11,1, 5,0,0, 5,1,0, 6,0,1, 6,13,0, 6,14,0, 8,11,1, 9,10,0, 10,0,1, 10,9,1, 11,4,0, 11,8,0, 11,13,0, 11,14,0, 13,6,1, 13,11,1, 14,6,1, 14,11,1, 
00961     // Length and number of words of that length
00962     3, 8,
00963     // Coordinates where words start and direction (0 = horizontal)
00964     0,7,0, 4,7,1, 5,10,0, 7,0,1, 7,4,0, 7,12,1, 10,5,1, 12,7,0, 
00965     // End marker
00966     0
00967   };
00968 
00969 
00970   /*
00971    * Name: 15.08, 15 x 15
00972    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
00973    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
00974    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
00975    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _)
00976    *    (* * * _ _ _ * _ _ _ * _ _ _ _)
00977    *    (_ _ _ * _ _ _ _ _ _ _ _ * * *)
00978    *    (_ _ _ _ * _ _ _ * _ _ _ _ _ _)
00979    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
00980    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ _)
00981    *    (* * * _ _ _ _ _ _ _ _ * _ _ _)
00982    *    (_ _ _ _ * _ _ _ * _ _ _ * * *)
00983    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _)
00984    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
00985    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
00986    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
00987    */
00988   const int g17[] = {
00989     // Width and height of crossword grid
00990     15, 15,
00991     // Number of black fields
00992     39,
00993     // Black field coordinates
00994     0,4, 0,9, 1,4, 1,9, 2,4, 2,9, 3,5, 3,11, 4,0, 4,1, 4,2, 4,6, 4,10, 5,3, 5,12, 5,13, 5,14, 6,4, 6,8, 7,7, 8,6, 8,10, 9,0, 9,1, 9,2, 9,11, 10,4, 10,8, 10,12, 10,13, 10,14, 11,3, 11,9, 12,5, 12,10, 13,5, 13,10, 14,5, 14,10, 
00995     // Length and number of words of that length
00996     8, 4,
00997     // Coordinates where words start and direction (0 = horizontal)
00998     3,9,0, 4,5,0, 5,4,1, 9,3,1, 
00999     // Length and number of words of that length
01000     7, 4,
01001     // Coordinates where words start and direction (0 = horizontal)
01002     0,7,0, 7,0,1, 7,8,1, 8,7,0, 
01003     // Length and number of words of that length
01004     6, 4,
01005     // Coordinates where words start and direction (0 = horizontal)
01006     0,8,0, 6,9,1, 8,0,1, 9,6,0, 
01007     // Length and number of words of that length
01008     5, 20,
01009     // Coordinates where words start and direction (0 = horizontal)
01010     0,3,0, 0,10,1, 0,12,0, 0,13,0, 0,14,0, 1,10,1, 2,10,1, 3,0,1, 3,6,1, 4,11,0, 6,3,0, 10,0,0, 10,1,0, 10,2,0, 10,11,0, 11,4,1, 11,10,1, 12,0,1, 13,0,1, 14,0,1, 
01011     // Length and number of words of that length
01012     4, 32,
01013     // Coordinates where words start and direction (0 = horizontal)
01014     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,5,1, 0,6,0, 0,10,0, 1,0,1, 1,5,1, 2,0,1, 2,5,1, 4,11,1, 5,0,0, 5,1,0, 5,2,0, 6,0,1, 6,12,0, 6,13,0, 6,14,0, 8,11,1, 10,0,1, 11,4,0, 11,8,0, 11,12,0, 11,13,0, 11,14,0, 12,6,1, 12,11,1, 13,6,1, 13,11,1, 14,6,1, 14,11,1, 
01015     // Length and number of words of that length
01016     3, 20,
01017     // Coordinates where words start and direction (0 = horizontal)
01018     0,5,0, 0,11,0, 3,4,0, 3,12,1, 4,3,1, 4,7,1, 5,0,1, 5,6,0, 5,10,0, 6,5,1, 7,4,0, 7,8,0, 8,7,1, 9,10,0, 9,12,1, 10,5,1, 10,9,1, 11,0,1, 12,3,0, 12,9,0, 
01019     // End marker
01020     0
01021   };
01022 
01023 
01024   /*
01025    * Name: 15.09, 15 x 15
01026    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01027    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01028    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01029    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
01030    *    (* * * _ _ _ * _ _ _ _ _ * * *)
01031    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
01032    *    (_ _ _ _ * _ _ _ * _ _ _ _ _ _)
01033    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _)
01034    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ _)
01035    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
01036    *    (* * * _ _ _ _ _ * _ _ _ * * *)
01037    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
01038    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01039    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01040    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01041    */
01042   const int g18[] = {
01043     // Width and height of crossword grid
01044     15, 15,
01045     // Number of black fields
01046     38,
01047     // Black field coordinates
01048     0,4, 0,10, 1,4, 1,10, 2,4, 2,10, 3,7, 4,0, 4,1, 4,2, 4,6, 4,12, 4,13, 4,14, 5,5, 5,9, 6,4, 6,8, 7,3, 7,11, 8,6, 8,10, 9,5, 9,9, 10,0, 10,1, 10,2, 10,8, 10,12, 10,13, 10,14, 11,7, 12,4, 12,10, 13,4, 13,10, 14,4, 14,10, 
01049     // Length and number of words of that length
01050     7, 10,
01051     // Coordinates where words start and direction (0 = horizontal)
01052     0,3,0, 0,11,0, 3,0,1, 3,8,1, 4,7,0, 7,4,1, 8,3,0, 8,11,0, 11,0,1, 11,8,1, 
01053     // Length and number of words of that length
01054     6, 4,
01055     // Coordinates where words start and direction (0 = horizontal)
01056     0,8,0, 6,9,1, 8,0,1, 9,6,0, 
01057     // Length and number of words of that length
01058     5, 24,
01059     // Coordinates where words start and direction (0 = horizontal)
01060     0,5,0, 0,5,1, 0,9,0, 1,5,1, 2,5,1, 3,10,0, 4,7,1, 5,0,0, 5,0,1, 5,1,0, 5,2,0, 5,10,1, 5,12,0, 5,13,0, 5,14,0, 7,4,0, 9,0,1, 9,10,1, 10,3,1, 10,5,0, 10,9,0, 12,5,1, 13,5,1, 14,5,1, 
01061     // Length and number of words of that length
01062     4, 28,
01063     // Coordinates where words start and direction (0 = horizontal)
01064     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,6,0, 0,11,1, 0,12,0, 0,13,0, 0,14,0, 1,0,1, 1,11,1, 2,0,1, 2,11,1, 6,0,1, 8,11,1, 11,0,0, 11,1,0, 11,2,0, 11,8,0, 11,12,0, 11,13,0, 11,14,0, 12,0,1, 12,11,1, 13,0,1, 13,11,1, 14,0,1, 14,11,1, 
01065     // Length and number of words of that length
01066     3, 16,
01067     // Coordinates where words start and direction (0 = horizontal)
01068     0,7,0, 3,4,0, 4,3,1, 5,6,0, 5,6,1, 6,5,0, 6,5,1, 6,9,0, 7,0,1, 7,8,0, 7,12,1, 8,7,1, 9,6,1, 9,10,0, 10,9,1, 12,7,0, 
01069     // End marker
01070     0
01071   };
01072 
01073 
01074   /*
01075    * Name: 15.10, 15 x 15
01076    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01077    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01078    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
01079    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
01080    *    (* * * * _ _ _ _ * _ _ _ _ _ _)
01081    *    (_ _ _ _ _ * * _ _ _ _ _ * * *)
01082    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
01083    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
01084    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
01085    *    (* * * _ _ _ _ _ * * _ _ _ _ _)
01086    *    (_ _ _ _ _ _ * _ _ _ _ * * * *)
01087    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
01088    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
01089    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01090    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
01091    */
01092   const int g19[] = {
01093     // Width and height of crossword grid
01094     15, 15,
01095     // Number of black fields
01096     35,
01097     // Black field coordinates
01098     0,4, 0,9, 1,4, 1,9, 2,4, 2,9, 3,4, 4,0, 4,1, 4,6, 4,11, 4,12, 4,13, 4,14, 5,5, 6,5, 6,10, 7,7, 8,4, 8,9, 9,9, 10,0, 10,1, 10,2, 10,3, 10,8, 10,13, 10,14, 11,10, 12,5, 12,10, 13,5, 13,10, 14,5, 14,10, 
01099     // Length and number of words of that length
01100     10, 8,
01101     // Coordinates where words start and direction (0 = horizontal)
01102     0,2,0, 0,3,0, 0,8,0, 3,5,1, 5,6,0, 5,11,0, 5,12,0, 11,0,1, 
01103     // Length and number of words of that length
01104     9, 2,
01105     // Coordinates where words start and direction (0 = horizontal)
01106     5,6,1, 9,0,1, 
01107     // Length and number of words of that length
01108     7, 4,
01109     // Coordinates where words start and direction (0 = horizontal)
01110     0,7,0, 7,0,1, 7,8,1, 8,7,0, 
01111     // Length and number of words of that length
01112     6, 2,
01113     // Coordinates where words start and direction (0 = horizontal)
01114     0,10,0, 9,4,0, 
01115     // Length and number of words of that length
01116     5, 18,
01117     // Coordinates where words start and direction (0 = horizontal)
01118     0,5,0, 0,10,1, 1,10,1, 2,10,1, 3,9,0, 5,0,0, 5,0,1, 5,1,0, 5,13,0, 5,14,0, 6,0,1, 7,5,0, 8,10,1, 9,10,1, 10,9,0, 12,0,1, 13,0,1, 14,0,1, 
01119     // Length and number of words of that length
01120     4, 38,
01121     // Coordinates where words start and direction (0 = horizontal)
01122     0,0,0, 0,0,1, 0,1,0, 0,5,1, 0,6,0, 0,11,0, 0,12,0, 0,13,0, 0,14,0, 1,0,1, 1,5,1, 2,0,1, 2,5,1, 3,0,1, 4,2,1, 4,4,0, 4,7,1, 6,6,1, 6,11,1, 7,10,0, 8,0,1, 8,5,1, 10,4,1, 10,9,1, 11,0,0, 11,1,0, 11,2,0, 11,3,0, 11,8,0, 11,11,1, 11,13,0, 11,14,0, 12,6,1, 12,11,1, 13,6,1, 13,11,1, 14,6,1, 14,11,1, 
01123     // End marker
01124     0
01125   };
01126 
01127 
01128   /*
01129    * Name: 19.01, 19 x 19
01130    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01131    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01132    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
01133    *    (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
01134    *    (* * * _ _ _ * _ _ _ _ * _ _ _ _ * * *)
01135    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
01136    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
01137    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01138    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01139    *    (* * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * *)
01140    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
01141    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
01142    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
01143    *    (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01144    *    (* * * _ _ _ _ * _ _ _ _ * _ _ _ * * *)
01145    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
01146    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
01147    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01148    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01149    */
01150   const int g20[] = {
01151     // Width and height of crossword grid
01152     19, 19,
01153     // Number of black fields
01154     60,
01155     // Black field coordinates
01156     0,4, 0,9, 0,14, 1,4, 1,9, 1,14, 2,4, 2,14, 3,7, 3,12, 4,0, 4,1, 4,6, 4,11, 4,17, 4,18, 5,5, 5,10, 6,4, 6,9, 6,15, 7,3, 7,8, 7,14, 8,7, 8,13, 9,0, 9,1, 9,2, 9,6, 9,12, 9,16, 9,17, 9,18, 10,5, 10,11, 11,4, 11,10, 11,15, 12,3, 12,9, 12,14, 13,8, 13,13, 14,0, 14,1, 14,7, 14,12, 14,17, 14,18, 15,6, 15,11, 16,4, 16,14, 17,4, 17,9, 17,14, 18,4, 18,9, 18,14, 
01157     // Length and number of words of that length
01158     9, 6,
01159     // Coordinates where words start and direction (0 = horizontal)
01160     0,2,0, 0,16,0, 2,5,1, 10,2,0, 10,16,0, 16,5,1, 
01161     // Length and number of words of that length
01162     8, 4,
01163     // Coordinates where words start and direction (0 = horizontal)
01164     0,13,0, 5,11,1, 11,5,0, 13,0,1, 
01165     // Length and number of words of that length
01166     7, 8,
01167     // Coordinates where words start and direction (0 = horizontal)
01168     0,3,0, 0,8,0, 3,0,1, 8,0,1, 10,12,1, 12,10,0, 12,15,0, 15,12,1, 
01169     // Length and number of words of that length
01170     6, 4,
01171     // Coordinates where words start and direction (0 = horizontal)
01172     0,15,0, 3,13,1, 13,3,0, 15,0,1, 
01173     // Length and number of words of that length
01174     5, 24,
01175     // Coordinates where words start and direction (0 = horizontal)
01176     0,5,0, 0,10,0, 4,12,0, 4,12,1, 5,0,1, 5,11,0, 6,10,0, 6,10,1, 7,9,0, 7,9,1, 8,8,0, 8,8,1, 8,14,1, 9,7,0, 9,7,1, 10,0,1, 10,6,0, 10,6,1, 11,5,1, 12,4,1, 13,14,1, 14,2,1, 14,8,0, 14,13,0, 
01177     // Length and number of words of that length
01178     4, 70,
01179     // Coordinates where words start and direction (0 = horizontal)
01180     0,0,0, 0,0,1, 0,1,0, 0,5,1, 0,6,0, 0,10,1, 0,11,0, 0,15,1, 0,17,0, 0,18,0, 1,0,1, 1,5,1, 1,10,1, 1,15,1, 2,0,1, 2,9,0, 2,15,1, 3,8,1, 3,14,0, 4,2,1, 4,7,0, 4,7,1, 5,0,0, 5,1,0, 5,6,0, 5,6,1, 5,17,0, 5,18,0, 6,0,1, 6,5,0, 6,5,1, 7,4,0, 7,4,1, 7,15,0, 7,15,1, 8,3,0, 8,14,0, 9,13,0, 10,0,0, 10,1,0, 10,12,0, 10,17,0, 10,18,0, 11,0,1, 11,11,0, 11,11,1, 12,4,0, 12,10,1, 12,15,1, 13,9,0, 13,9,1, 14,8,1, 14,13,1, 15,0,0, 15,1,0, 15,7,0, 15,7,1, 15,12,0, 15,17,0, 15,18,0, 16,0,1, 16,15,1, 17,0,1, 17,5,1, 17,10,1, 17,15,1, 18,0,1, 18,5,1, 18,10,1, 18,15,1, 
01181     // Length and number of words of that length
01182     3, 12,
01183     // Coordinates where words start and direction (0 = horizontal)
01184     0,7,0, 0,12,0, 3,4,0, 6,16,1, 7,0,1, 9,3,1, 9,13,1, 11,16,1, 12,0,1, 13,14,0, 16,6,0, 16,11,0, 
01185     // End marker
01186     0
01187   };
01188 
01189 
01190   /*
01191    * Name: 19.02, 19 x 19
01192    *    (_ _ _ _ _ * * _ _ _ _ _ * * _ _ _ _ _)
01193    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01194    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _)
01195    *    (_ _ _ _ * _ _ _ _ _ * * _ _ _ _ _ _ _)
01196    *    (* * * _ _ _ _ _ _ * _ _ _ _ _ _ _ * *)
01197    *    (_ _ _ _ _ _ _ * * _ _ _ _ _ * _ _ _ _)
01198    *    (_ _ _ _ _ * * _ _ _ _ _ _ _ * * _ _ _)
01199    *    (_ _ _ * * _ _ _ _ _ _ _ _ * _ _ _ _ _)
01200    *    (_ _ _ _ * _ _ _ _ _ * * * _ _ _ _ _ _)
01201    *    (* * _ _ _ _ _ _ _ * _ _ _ _ _ _ _ * *)
01202    *    (_ _ _ _ _ _ * * * _ _ _ _ _ * _ _ _ _)
01203    *    (_ _ _ _ _ * _ _ _ _ _ _ _ _ * * _ _ _)
01204    *    (_ _ _ * * _ _ _ _ _ _ _ * * _ _ _ _ _)
01205    *    (_ _ _ _ * _ _ _ _ _ * * _ _ _ _ _ _ _)
01206    *    (* * _ _ _ _ _ _ _ * _ _ _ _ _ _ * * *)
01207    *    (_ _ _ _ _ _ _ * * _ _ _ _ _ * _ _ _ _)
01208    *    (_ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _)
01209    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01210    *    (_ _ _ _ _ * * _ _ _ _ _ * * _ _ _ _ _)
01211    */
01212   const int g21[] = {
01213     // Width and height of crossword grid
01214     19, 19,
01215     // Number of black fields
01216     65,
01217     // Black field coordinates
01218     0,4, 0,9, 0,14, 1,4, 1,9, 1,14, 2,4, 3,7, 3,12, 4,3, 4,7, 4,8, 4,12, 4,13, 5,0, 5,1, 5,6, 5,11, 5,16, 5,17, 5,18, 6,0, 6,6, 6,10, 6,18, 7,5, 7,10, 7,15, 8,5, 8,10, 8,15, 9,4, 9,9, 9,14, 10,3, 10,8, 10,13, 11,3, 11,8, 11,13, 12,0, 12,8, 12,12, 12,18, 13,0, 13,1, 13,2, 13,7, 13,12, 13,17, 13,18, 14,5, 14,6, 14,10, 14,11, 14,15, 15,6, 15,11, 16,14, 17,4, 17,9, 17,14, 18,4, 18,9, 18,14, 
01219     // Length and number of words of that length
01220     14, 2,
01221     // Coordinates where words start and direction (0 = horizontal)
01222     2,5,1, 16,0,1, 
01223     // Length and number of words of that length
01224     13, 2,
01225     // Coordinates where words start and direction (0 = horizontal)
01226     0,2,0, 6,16,0, 
01227     // Length and number of words of that length
01228     8, 2,
01229     // Coordinates where words start and direction (0 = horizontal)
01230     5,7,0, 6,11,0, 
01231     // Length and number of words of that length
01232     7, 16,
01233     // Coordinates where words start and direction (0 = horizontal)
01234     0,5,0, 0,15,0, 2,9,0, 2,14,0, 3,0,1, 5,12,0, 6,1,0, 6,11,1, 6,17,0, 7,6,0, 10,4,0, 10,9,0, 12,1,1, 12,3,0, 12,13,0, 15,12,1, 
01235     // Length and number of words of that length
01236     6, 6,
01237     // Coordinates where words start and direction (0 = horizontal)
01238     0,10,0, 3,4,0, 3,13,1, 10,14,0, 13,8,0, 15,0,1, 
01239     // Length and number of words of that length
01240     5, 30,
01241     // Coordinates where words start and direction (0 = horizontal)
01242     0,0,0, 0,1,0, 0,6,0, 0,11,0, 0,16,0, 0,17,0, 0,18,0, 4,14,1, 5,3,0, 5,8,0, 5,13,0, 6,1,1, 7,0,0, 7,0,1, 7,18,0, 8,0,1, 9,5,0, 9,10,0, 9,15,0, 10,14,1, 11,14,1, 12,13,1, 14,0,0, 14,0,1, 14,1,0, 14,2,0, 14,7,0, 14,12,0, 14,17,0, 14,18,0, 
01243     // Length and number of words of that length
01244     4, 44,
01245     // Coordinates where words start and direction (0 = horizontal)
01246     0,0,1, 0,3,0, 0,5,1, 0,8,0, 0,10,1, 0,13,0, 0,15,1, 1,0,1, 1,5,1, 1,10,1, 1,15,1, 2,0,1, 3,8,1, 5,2,1, 5,7,1, 5,12,1, 7,6,1, 7,11,1, 8,6,1, 8,11,1, 9,0,1, 9,5,1, 9,10,1, 9,15,1, 10,4,1, 10,9,1, 11,4,1, 11,9,1, 13,3,1, 13,8,1, 13,13,1, 15,5,0, 15,7,1, 15,10,0, 15,15,0, 16,15,1, 17,0,1, 17,5,1, 17,10,1, 17,15,1, 18,0,1, 18,5,1, 18,10,1, 18,15,1, 
01247     // Length and number of words of that length
01248     3, 16,
01249     // Coordinates where words start and direction (0 = horizontal)
01250     0,7,0, 0,12,0, 4,0,1, 4,4,1, 4,9,1, 6,7,1, 7,16,1, 8,16,1, 10,0,1, 11,0,1, 12,9,1, 14,7,1, 14,12,1, 14,16,1, 16,6,0, 16,11,0, 
01251     // End marker
01252     0
01253   };
01254 
01255 
01256   /*
01257    * Name: 19.03, 19 x 19
01258    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01259    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01260    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01261    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
01262    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01263    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01264    *    (* * * _ _ _ _ _ * _ _ _ _ _ _ _ * * *)
01265    *    (_ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _)
01266    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
01267    *    (_ _ _ * * _ _ _ _ _ _ _ _ _ * * _ _ _)
01268    *    (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _)
01269    *    (_ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _)
01270    *    (* * * _ _ _ _ _ _ _ * _ _ _ _ _ * * *)
01271    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01272    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01273    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
01274    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01275    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01276    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01277    */
01278   const int g22[] = {
01279     // Width and height of crossword grid
01280     19, 19,
01281     // Number of black fields
01282     54,
01283     // Black field coordinates
01284     0,6, 0,12, 1,6, 1,12, 2,6, 2,12, 3,3, 3,9, 3,15, 4,4, 4,9, 4,14, 5,5, 5,13, 6,0, 6,1, 6,2, 6,8, 6,16, 6,17, 6,18, 7,7, 7,11, 8,6, 8,10, 9,3, 9,4, 9,14, 9,15, 10,8, 10,12, 11,7, 11,11, 12,0, 12,1, 12,2, 12,10, 12,16, 12,17, 12,18, 13,5, 13,13, 14,4, 14,9, 14,14, 15,3, 15,9, 15,15, 16,6, 16,12, 17,6, 17,12, 18,6, 18,12, 
01285     // Length and number of words of that length
01286     9, 2,
01287     // Coordinates where words start and direction (0 = horizontal)
01288     5,9,0, 9,5,1, 
01289     // Length and number of words of that length
01290     8, 4,
01291     // Coordinates where words start and direction (0 = horizontal)
01292     0,10,0, 8,11,1, 10,0,1, 11,8,0, 
01293     // Length and number of words of that length
01294     7, 16,
01295     // Coordinates where words start and direction (0 = horizontal)
01296     0,7,0, 0,11,0, 3,12,0, 5,6,1, 6,5,0, 6,9,1, 6,13,0, 7,0,1, 7,12,1, 9,6,0, 11,0,1, 11,12,1, 12,3,1, 12,7,0, 12,11,0, 13,6,1, 
01297     // Length and number of words of that length
01298     6, 28,
01299     // Coordinates where words start and direction (0 = horizontal)
01300     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,8,0, 0,13,1, 0,16,0, 0,17,0, 0,18,0, 1,0,1, 1,13,1, 2,0,1, 2,13,1, 8,0,1, 10,13,1, 13,0,0, 13,1,0, 13,2,0, 13,10,0, 13,16,0, 13,17,0, 13,18,0, 16,0,1, 16,13,1, 17,0,1, 17,13,1, 18,0,1, 18,13,1, 
01301     // Length and number of words of that length
01302     5, 32,
01303     // Coordinates where words start and direction (0 = horizontal)
01304     0,5,0, 0,7,1, 0,13,0, 1,7,1, 2,7,1, 3,4,1, 3,6,0, 3,10,1, 4,3,0, 4,15,0, 5,0,1, 5,14,1, 6,3,1, 7,0,0, 7,1,0, 7,2,0, 7,16,0, 7,17,0, 7,18,0, 10,3,0, 10,15,0, 11,12,0, 12,11,1, 13,0,1, 13,14,1, 14,5,0, 14,13,0, 15,4,1, 15,10,1, 16,7,1, 17,7,1, 18,7,1, 
01305     // Length and number of words of that length
01306     4, 16,
01307     // Coordinates where words start and direction (0 = horizontal)
01308     0,4,0, 0,14,0, 4,0,1, 4,5,1, 4,10,1, 4,15,1, 5,4,0, 5,14,0, 10,4,0, 10,14,0, 14,0,1, 14,5,1, 14,10,1, 14,15,1, 15,4,0, 15,14,0, 
01309     // Length and number of words of that length
01310     3, 20,
01311     // Coordinates where words start and direction (0 = horizontal)
01312     0,3,0, 0,9,0, 0,15,0, 3,0,1, 3,16,1, 7,8,0, 7,8,1, 8,7,0, 8,7,1, 8,11,0, 9,0,1, 9,10,0, 9,16,1, 10,9,1, 11,8,1, 15,0,1, 15,16,1, 16,3,0, 16,9,0, 16,15,0, 
01313     // End marker
01314     0
01315   };
01316 
01317 
01318   /*
01319    * Name: 19.04, 19 x 19
01320    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01321    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01322    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01323    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _)
01324    *    (_ _ _ _ * _ _ _ * * * _ _ _ * _ _ _ _)
01325    *    (* * * _ _ _ _ _ _ _ _ _ _ _ _ _ * * *)
01326    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01327    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _)
01328    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01329    *    (_ _ _ _ * _ _ _ * * * _ _ _ * _ _ _ _)
01330    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01331    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _)
01332    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01333    *    (* * * _ _ _ _ _ _ _ _ _ _ _ _ _ * * *)
01334    *    (_ _ _ _ * _ _ _ * * * _ _ _ * _ _ _ _)
01335    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _)
01336    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01337    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01338    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
01339    */
01340   const int g23[] = {
01341     // Width and height of crossword grid
01342     19, 19,
01343     // Number of black fields
01344     65,
01345     // Black field coordinates
01346     0,5, 0,13, 1,5, 1,13, 2,5, 2,13, 3,3, 3,7, 3,11, 3,15, 4,4, 4,8, 4,9, 4,10, 4,14, 5,0, 5,1, 5,2, 5,16, 5,17, 5,18, 6,6, 6,12, 7,3, 7,7, 7,11, 7,15, 8,4, 8,9, 8,14, 9,4, 9,8, 9,9, 9,10, 9,14, 10,4, 10,9, 10,14, 11,3, 11,7, 11,11, 11,15, 12,6, 12,12, 13,0, 13,1, 13,2, 13,16, 13,17, 13,18, 14,4, 14,8, 14,9, 14,10, 14,14, 15,3, 15,7, 15,11, 15,15, 16,5, 16,13, 17,5, 17,13, 18,5, 18,13, 
01347     // Length and number of words of that length
01348     13, 4,
01349     // Coordinates where words start and direction (0 = horizontal)
01350     3,5,0, 3,13,0, 5,3,1, 13,3,1, 
01351     // Length and number of words of that length
01352     7, 12,
01353     // Coordinates where words start and direction (0 = horizontal)
01354     0,6,1, 1,6,1, 2,6,1, 6,0,0, 6,1,0, 6,2,0, 6,16,0, 6,17,0, 6,18,0, 16,6,1, 17,6,1, 18,6,1, 
01355     // Length and number of words of that length
01356     6, 8,
01357     // Coordinates where words start and direction (0 = horizontal)
01358     0,6,0, 0,12,0, 6,0,1, 6,13,1, 12,0,1, 12,13,1, 13,6,0, 13,12,0, 
01359     // Length and number of words of that length
01360     5, 28,
01361     // Coordinates where words start and direction (0 = horizontal)
01362     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,14,1, 0,16,0, 0,17,0, 0,18,0, 1,0,1, 1,14,1, 2,0,1, 2,14,1, 6,7,1, 7,6,0, 7,12,0, 12,7,1, 14,0,0, 14,1,0, 14,2,0, 14,16,0, 14,17,0, 14,18,0, 16,0,1, 16,14,1, 17,0,1, 17,14,1, 18,0,1, 18,14,1, 
01363     // Length and number of words of that length
01364     4, 28,
01365     // Coordinates where words start and direction (0 = horizontal)
01366     0,4,0, 0,8,0, 0,9,0, 0,10,0, 0,14,0, 4,0,1, 4,15,1, 5,8,0, 5,10,0, 8,0,1, 8,5,1, 8,10,1, 8,15,1, 9,0,1, 9,15,1, 10,0,1, 10,5,1, 10,8,0, 10,10,0, 10,10,1, 10,15,1, 14,0,1, 14,15,1, 15,4,0, 15,8,0, 15,9,0, 15,10,0, 15,14,0, 
01367     // Length and number of words of that length
01368     3, 52,
01369     // Coordinates where words start and direction (0 = horizontal)
01370     0,3,0, 0,7,0, 0,11,0, 0,15,0, 3,0,1, 3,4,1, 3,8,1, 3,12,1, 3,16,1, 4,3,0, 4,5,1, 4,7,0, 4,11,0, 4,11,1, 4,15,0, 5,4,0, 5,9,0, 5,14,0, 7,0,1, 7,4,1, 7,8,1, 7,12,1, 7,16,1, 8,3,0, 8,7,0, 8,11,0, 8,15,0, 9,5,1, 9,11,1, 11,0,1, 11,4,0, 11,4,1, 11,8,1, 11,9,0, 11,12,1, 11,14,0, 11,16,1, 12,3,0, 12,7,0, 12,11,0, 12,15,0, 14,5,1, 14,11,1, 15,0,1, 15,4,1, 15,8,1, 15,12,1, 15,16,1, 16,3,0, 16,7,0, 16,11,0, 16,15,0, 
01371     // End marker
01372     0
01373   };
01374 
01375 
01376   /*
01377    * Name: 19.05, 19 x 19
01378    *    (_ _ _ _ * * _ _ _ * _ _ _ _ * _ _ _ _)
01379    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01380    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01381    *    (_ _ _ _ _ _ _ * _ _ _ * _ _ _ _ * * *)
01382    *    (* * * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
01383    *    (_ _ _ _ _ _ * _ _ _ _ _ * * _ _ _ _ _)
01384    *    (_ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _ _)
01385    *    (_ _ _ _ * _ _ _ _ * * _ _ _ _ * _ _ _)
01386    *    (_ _ _ _ * * _ _ _ _ _ * _ _ _ _ * * *)
01387    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
01388    *    (* * * _ _ _ _ * _ _ _ _ _ * * _ _ _ _)
01389    *    (_ _ _ * _ _ _ _ * * _ _ _ _ * _ _ _ _)
01390    *    (_ _ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _)
01391    *    (_ _ _ _ _ * * _ _ _ _ _ * _ _ _ _ _ _)
01392    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * * *)
01393    *    (* * * _ _ _ _ * _ _ _ * _ _ _ _ _ _ _)
01394    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01395    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01396    *    (_ _ _ _ * _ _ _ _ * _ _ _ * * _ _ _ _)
01397    */
01398   const int g24[] = {
01399     // Width and height of crossword grid
01400     19, 19,
01401     // Number of black fields
01402     70,
01403     // Black field coordinates
01404     0,4, 0,10, 0,15, 1,4, 1,10, 1,15, 2,4, 2,10, 2,15, 3,6, 3,11, 4,0, 4,1, 4,2, 4,7, 4,8, 4,12, 4,16, 4,17, 4,18, 5,0, 5,8, 5,12, 5,13, 6,5, 6,13, 7,3, 7,10, 7,15, 8,6, 8,11, 9,0, 9,1, 9,2, 9,7, 9,11, 9,16, 9,17, 9,18, 10,7, 10,12, 11,3, 11,8, 11,15, 12,5, 12,13, 13,5, 13,6, 13,10, 13,18, 14,0, 14,1, 14,2, 14,6, 14,10, 14,11, 14,16, 14,17, 14,18, 15,7, 15,12, 16,3, 16,8, 16,14, 17,3, 17,8, 17,14, 18,3, 18,8, 18,14, 
01405     // Length and number of words of that length
01406     19, 1,
01407     // Coordinates where words start and direction (0 = horizontal)
01408     0,9,0, 
01409     // Length and number of words of that length
01410     16, 2,
01411     // Coordinates where words start and direction (0 = horizontal)
01412     0,14,0, 3,4,0, 
01413     // Length and number of words of that length
01414     7, 10,
01415     // Coordinates where words start and direction (0 = horizontal)
01416     0,3,0, 3,12,1, 5,1,1, 6,6,1, 8,12,1, 10,0,1, 12,6,1, 12,15,0, 13,11,1, 15,0,1, 
01417     // Length and number of words of that length
01418     6, 8,
01419     // Coordinates where words start and direction (0 = horizontal)
01420     0,5,0, 3,0,1, 7,4,1, 8,0,1, 10,13,1, 11,9,1, 13,13,0, 15,13,1, 
01421     // Length and number of words of that length
01422     5, 18,
01423     // Coordinates where words start and direction (0 = horizontal)
01424     0,5,1, 0,13,0, 1,5,1, 2,5,1, 5,14,1, 6,0,1, 6,8,0, 6,14,1, 7,5,0, 7,13,0, 8,10,0, 12,0,1, 12,14,1, 13,0,1, 14,5,0, 16,9,1, 17,9,1, 18,9,1, 
01425     // Length and number of words of that length
01426     4, 62,
01427     // Coordinates where words start and direction (0 = horizontal)
01428     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,7,0, 0,8,0, 0,11,1, 0,12,0, 0,16,0, 0,17,0, 0,18,0, 1,0,1, 1,11,1, 2,0,1, 2,11,1, 3,7,1, 3,10,0, 3,15,0, 4,3,1, 4,6,0, 4,11,0, 5,1,0, 5,2,0, 5,7,0, 5,16,0, 5,17,0, 5,18,0, 6,12,0, 7,11,1, 8,7,1, 9,3,1, 9,6,0, 9,12,1, 10,0,0, 10,1,0, 10,2,0, 10,8,1, 10,11,0, 10,16,0, 10,17,0, 11,4,1, 11,7,0, 11,12,0, 12,3,0, 12,8,0, 14,12,1, 15,0,0, 15,1,0, 15,2,0, 15,6,0, 15,8,1, 15,10,0, 15,11,0, 15,16,0, 15,17,0, 15,18,0, 16,4,1, 16,15,1, 17,4,1, 17,15,1, 18,4,1, 18,15,1, 
01429     // Length and number of words of that length
01430     3, 25,
01431     // Coordinates where words start and direction (0 = horizontal)
01432     0,6,0, 0,11,0, 0,16,1, 1,16,1, 2,16,1, 4,9,1, 4,13,1, 5,9,1, 6,0,0, 7,0,1, 7,16,1, 8,3,0, 8,15,0, 9,8,1, 10,18,0, 11,0,1, 11,16,1, 13,7,1, 14,3,1, 14,7,1, 16,0,1, 16,7,0, 16,12,0, 17,0,1, 18,0,1, 
01433     // End marker
01434     0
01435   };
01436 
01437 
01438   /*
01439    * Name: 19.06, 19 x 19
01440    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01441    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01442    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01443    *    (* _ _ _ * _ _ _ _ _ _ _ _ _ _ _ * * *)
01444    *    (* * * _ _ _ * * _ _ _ * * _ _ _ _ * *)
01445    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
01446    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
01447    *    (_ _ _ _ * _ _ _ * _ _ _ _ _ * * _ _ _)
01448    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01449    *    (* * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * *)
01450    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
01451    *    (_ _ _ * * _ _ _ _ _ * _ _ _ * _ _ _ _)
01452    *    (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
01453    *    (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01454    *    (* * _ _ _ _ * * _ _ _ * * _ _ _ * * *)
01455    *    (* * * _ _ _ _ _ _ _ _ _ _ _ * _ _ _ *)
01456    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01457    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01458    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01459    */
01460   const int g25[] = {
01461     // Width and height of crossword grid
01462     19, 19,
01463     // Number of black fields
01464     74,
01465     // Black field coordinates
01466     0,3, 0,4, 0,9, 0,14, 0,15, 1,4, 1,9, 1,14, 1,15, 2,4, 2,15, 3,11, 3,12, 4,0, 4,1, 4,2, 4,3, 4,7, 4,11, 4,16, 4,17, 4,18, 5,5, 5,6, 5,10, 6,4, 6,9, 6,14, 7,4, 7,8, 7,14, 8,7, 8,13, 9,0, 9,1, 9,2, 9,6, 9,12, 9,16, 9,17, 9,18, 10,5, 10,11, 11,4, 11,10, 11,14, 12,4, 12,9, 12,14, 13,8, 13,12, 13,13, 14,0, 14,1, 14,2, 14,7, 14,11, 14,15, 14,16, 14,17, 14,18, 15,6, 15,7, 16,3, 16,14, 17,3, 17,4, 17,9, 17,14, 18,3, 18,4, 18,9, 18,14, 18,15, 
01467     // Length and number of words of that length
01468     11, 4,
01469     // Coordinates where words start and direction (0 = horizontal)
01470     3,0,1, 3,15,0, 5,3,0, 15,8,1, 
01471     // Length and number of words of that length
01472     10, 2,
01473     // Coordinates where words start and direction (0 = horizontal)
01474     2,5,1, 16,4,1, 
01475     // Length and number of words of that length
01476     8, 4,
01477     // Coordinates where words start and direction (0 = horizontal)
01478     0,13,0, 5,11,1, 11,5,0, 13,0,1, 
01479     // Length and number of words of that length
01480     7, 4,
01481     // Coordinates where words start and direction (0 = horizontal)
01482     0,8,0, 8,0,1, 10,12,1, 12,10,0, 
01483     // Length and number of words of that length
01484     6, 2,
01485     // Coordinates where words start and direction (0 = horizontal)
01486     3,13,1, 15,0,1, 
01487     // Length and number of words of that length
01488     5, 22,
01489     // Coordinates where words start and direction (0 = horizontal)
01490     0,5,0, 0,6,0, 0,10,0, 4,12,0, 5,0,1, 5,11,0, 6,10,0, 7,9,0, 7,9,1, 8,8,0, 8,8,1, 8,14,1, 9,7,0, 9,7,1, 10,0,1, 10,6,0, 10,6,1, 11,5,1, 13,14,1, 14,8,0, 14,12,0, 14,13,0, 
01491     // Length and number of words of that length
01492     4, 58,
01493     // Coordinates where words start and direction (0 = horizontal)
01494     0,0,0, 0,1,0, 0,2,0, 0,5,1, 0,7,0, 0,10,1, 0,16,0, 0,17,0, 0,18,0, 1,0,1, 1,5,1, 1,10,1, 2,0,1, 2,9,0, 2,14,0, 4,12,1, 5,0,0, 5,1,0, 5,2,0, 5,16,0, 5,17,0, 5,18,0, 6,0,1, 6,5,0, 6,5,1, 6,10,1, 6,15,1, 7,0,1, 7,15,1, 9,13,0, 10,0,0, 10,1,0, 10,2,0, 10,16,0, 10,17,0, 10,18,0, 11,0,1, 11,15,1, 12,0,1, 12,5,1, 12,10,1, 12,15,1, 13,4,0, 13,9,0, 14,3,1, 15,0,0, 15,1,0, 15,2,0, 15,11,0, 15,16,0, 15,17,0, 15,18,0, 16,15,1, 17,5,1, 17,10,1, 17,15,1, 18,5,1, 18,10,1, 
01495     // Length and number of words of that length
01496     3, 32,
01497     // Coordinates where words start and direction (0 = horizontal)
01498     0,0,1, 0,11,0, 0,12,0, 0,16,1, 1,3,0, 1,16,1, 2,16,1, 3,4,0, 4,4,1, 4,8,1, 5,7,0, 5,7,1, 6,6,0, 7,5,1, 8,4,0, 8,14,0, 9,3,1, 9,13,1, 10,12,0, 11,11,0, 11,11,1, 13,9,1, 13,14,0, 14,8,1, 14,12,1, 15,15,0, 16,0,1, 16,6,0, 16,7,0, 17,0,1, 18,0,1, 18,16,1, 
01499     // End marker
01500     0
01501   };
01502 
01503 
01504   /*
01505    * Name: 19.07, 19 x 19
01506    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
01507    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
01508    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
01509    *    (_ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _ _)
01510    *    (* * * * _ _ _ * _ _ _ _ * _ _ _ * * *)
01511    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
01512    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
01513    *    (_ _ _ _ * _ _ _ * * _ _ _ * * _ _ _ _)
01514    *    (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
01515    *    (* * * _ _ _ _ * _ _ _ * _ _ _ _ * * *)
01516    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
01517    *    (_ _ _ _ * * _ _ _ * * _ _ _ * _ _ _ _)
01518    *    (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01519    *    (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
01520    *    (* * * _ _ _ * _ _ _ _ * _ _ _ * * * *)
01521    *    (_ _ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _)
01522    *    (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
01523    *    (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01524    *    (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01525    */
01526   const int g26[] = {
01527     // Width and height of crossword grid
01528     19, 19,
01529     // Number of black fields
01530     70,
01531     // Black field coordinates
01532     0,4, 0,9, 0,14, 1,4, 1,9, 1,14, 2,4, 2,9, 2,14, 3,3, 3,4, 3,16, 3,17, 3,18, 4,7, 4,11, 4,15, 5,0, 5,1, 5,6, 5,11, 5,15, 6,5, 6,10, 6,14, 7,4, 7,8, 7,9, 7,13, 8,3, 8,7, 8,12, 8,17, 8,18, 9,7, 9,11, 10,0, 10,1, 10,6, 10,11, 10,15, 11,5, 11,9, 11,10, 11,14, 12,4, 12,8, 12,13, 13,3, 13,7, 13,12, 13,17, 13,18, 14,3, 14,7, 14,11, 15,0, 15,1, 15,2, 15,14, 15,15, 16,4, 16,9, 16,14, 17,4, 17,9, 17,14, 18,4, 18,9, 18,14, 
01533     // Length and number of words of that length
01534     15, 2,
01535     // Coordinates where words start and direction (0 = horizontal)
01536     0,2,0, 4,16,0, 
01537     // Length and number of words of that length
01538     11, 2,
01539     // Coordinates where words start and direction (0 = horizontal)
01540     3,5,1, 15,3,1, 
01541     // Length and number of words of that length
01542     8, 2,
01543     // Coordinates where words start and direction (0 = horizontal)
01544     0,12,0, 11,6,0, 
01545     // Length and number of words of that length
01546     7, 8,
01547     // Coordinates where words start and direction (0 = horizontal)
01548     0,8,0, 0,13,0, 4,0,1, 9,0,1, 9,12,1, 12,5,0, 12,10,0, 14,12,1, 
01549     // Length and number of words of that length
01550     6, 4,
01551     // Coordinates where words start and direction (0 = horizontal)
01552     0,5,0, 0,10,0, 13,8,0, 13,13,0, 
01553     // Length and number of words of that length
01554     5, 10,
01555     // Coordinates where words start and direction (0 = horizontal)
01556     0,0,0, 0,1,0, 0,6,0, 6,0,1, 7,14,1, 11,0,1, 12,14,1, 14,12,0, 14,17,0, 14,18,0, 
01557     // Length and number of words of that length
01558     4, 66,
01559     // Coordinates where words start and direction (0 = horizontal)
01560     0,0,1, 0,5,1, 0,7,0, 0,10,1, 0,11,0, 0,15,0, 0,15,1, 1,0,1, 1,5,1, 1,10,1, 1,15,1, 2,0,1, 2,5,1, 2,10,1, 2,15,1, 3,9,0, 4,3,0, 4,17,0, 4,18,0, 5,2,1, 5,7,1, 6,0,0, 6,1,0, 6,6,0, 6,6,1, 6,15,0, 6,15,1, 7,0,1, 7,5,0, 7,10,0, 7,14,0, 8,4,0, 8,8,0, 8,8,1, 8,13,0, 8,13,1, 9,3,0, 9,12,0, 9,17,0, 9,18,0, 10,2,1, 10,7,1, 11,0,0, 11,1,0, 11,15,0, 11,15,1, 12,0,1, 12,9,0, 12,9,1, 13,8,1, 13,13,1, 15,3,0, 15,7,0, 15,11,0, 16,0,1, 16,5,1, 16,10,1, 16,15,1, 17,0,1, 17,5,1, 17,10,1, 17,15,1, 18,0,1, 18,5,1, 18,10,1, 18,15,1, 
01561     // Length and number of words of that length
01562     3, 40,
01563     // Coordinates where words start and direction (0 = horizontal)
01564     0,3,0, 0,16,0, 0,17,0, 0,18,0, 3,0,1, 3,14,0, 4,4,0, 4,8,1, 4,12,1, 4,16,1, 5,7,0, 5,12,1, 5,16,1, 6,11,0, 6,11,1, 7,5,1, 7,10,1, 8,0,1, 8,4,1, 8,9,0, 9,8,1, 10,7,0, 10,12,1, 10,16,1, 11,6,1, 11,11,0, 11,11,1, 12,5,1, 12,14,0, 13,0,1, 13,4,0, 13,4,1, 14,0,1, 14,4,1, 14,8,1, 15,16,1, 16,0,0, 16,1,0, 16,2,0, 16,15,0, 
01565     // End marker
01566     0
01567   };
01568 
01569 
01570   /*
01571    * Name: 19.08, 19 x 19
01572    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01573    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01574    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01575    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _)
01576    *    (* * * _ _ _ * * _ _ _ _ * _ _ _ * * *)
01577    *    (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01578    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
01579    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _)
01580    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
01581    *    (* * * _ _ _ * _ _ _ _ _ * _ _ _ * * *)
01582    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01583    *    (_ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _)
01584    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
01585    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
01586    *    (* * * _ _ _ * _ _ _ _ * * _ _ _ * * *)
01587    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
01588    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01589    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01590    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01591    */
01592   const int g27[] = {
01593     // Width and height of crossword grid
01594     19, 19,
01595     // Number of black fields
01596     66,
01597     // Black field coordinates
01598     0,4, 0,9, 0,14, 1,4, 1,9, 1,14, 2,4, 2,9, 2,14, 3,6, 4,0, 4,1, 4,2, 4,7, 4,11, 4,12, 4,16, 4,17, 4,18, 5,8, 5,13, 6,4, 6,9, 6,14, 7,4, 7,10, 8,5, 8,11, 8,15, 9,0, 9,1, 9,2, 9,6, 9,12, 9,16, 9,17, 9,18, 10,3, 10,7, 10,13, 11,8, 11,14, 12,4, 12,9, 12,14, 13,5, 13,10, 14,0, 14,1, 14,2, 14,6, 14,7, 14,11, 14,16, 14,17, 14,18, 15,12, 16,4, 16,9, 16,14, 17,4, 17,9, 17,14, 18,4, 18,9, 18,14, 
01599     // Length and number of words of that length
01600     12, 2,
01601     // Coordinates where words start and direction (0 = horizontal)
01602     3,7,1, 15,0,1, 
01603     // Length and number of words of that length
01604     10, 2,
01605     // Coordinates where words start and direction (0 = horizontal)
01606     0,3,0, 9,15,0, 
01607     // Length and number of words of that length
01608     8, 8,
01609     // Coordinates where words start and direction (0 = horizontal)
01610     0,5,0, 0,15,0, 5,0,1, 7,11,1, 11,0,1, 11,3,0, 11,13,0, 13,11,1, 
01611     // Length and number of words of that length
01612     7, 2,
01613     // Coordinates where words start and direction (0 = horizontal)
01614     0,10,0, 12,8,0, 
01615     // Length and number of words of that length
01616     6, 2,
01617     // Coordinates where words start and direction (0 = horizontal)
01618     3,0,1, 15,13,1, 
01619     // Length and number of words of that length
01620     5, 20,
01621     // Coordinates where words start and direction (0 = horizontal)
01622     0,8,0, 0,13,0, 4,6,0, 5,7,0, 5,14,1, 6,8,0, 7,5,1, 7,9,0, 8,0,1, 8,6,1, 8,10,0, 9,7,1, 9,11,0, 10,8,1, 10,12,0, 10,14,1, 11,9,1, 13,0,1, 14,5,0, 14,10,0, 
01623     // Length and number of words of that length
01624     4, 74,
01625     // Coordinates where words start and direction (0 = horizontal)
01626     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,5,1, 0,7,0, 0,10,1, 0,11,0, 0,12,0, 0,15,1, 0,16,0, 0,17,0, 0,18,0, 1,0,1, 1,5,1, 1,10,1, 1,15,1, 2,0,1, 2,5,1, 2,10,1, 2,15,1, 4,3,1, 5,0,0, 5,1,0, 5,2,0, 5,9,1, 5,12,0, 5,16,0, 5,17,0, 5,18,0, 6,0,1, 6,5,1, 6,10,1, 6,13,0, 6,15,1, 7,0,1, 7,14,0, 8,4,0, 9,5,0, 10,0,0, 10,1,0, 10,2,0, 10,6,0, 10,16,0, 10,17,0, 10,18,0, 11,15,1, 12,0,1, 12,5,1, 12,10,1, 12,15,1, 13,6,1, 14,12,1, 15,0,0, 15,1,0, 15,2,0, 15,6,0, 15,7,0, 15,11,0, 15,16,0, 15,17,0, 15,18,0, 16,0,1, 16,5,1, 16,10,1, 16,15,1, 17,0,1, 17,5,1, 17,10,1, 17,15,1, 18,0,1, 18,5,1, 18,10,1, 18,15,1, 
01627     // Length and number of words of that length
01628     3, 20,
01629     // Coordinates where words start and direction (0 = horizontal)
01630     0,6,0, 3,4,0, 3,9,0, 3,14,0, 4,8,1, 4,13,1, 5,11,0, 8,12,1, 8,16,1, 9,3,1, 9,13,1, 10,0,1, 10,4,1, 11,7,0, 13,4,0, 13,9,0, 13,14,0, 14,3,1, 14,8,1, 16,12,0, 
01631     // End marker
01632     0
01633   };
01634 
01635 
01636   /*
01637    * Name: 19.09, 19 x 19
01638    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01639    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01640    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01641    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
01642    *    (* * * _ _ _ _ * _ _ _ * * _ _ _ _ * *)
01643    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
01644    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ * _ _ _ _)
01645    *    (_ _ _ * * _ _ _ * _ _ _ _ _ * * _ _ _)
01646    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01647    *    (* * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * *)
01648    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
01649    *    (_ _ _ * * _ _ _ _ _ * _ _ _ * * _ _ _)
01650    *    (_ _ _ _ * _ _ _ _ * _ _ _ * _ _ _ _ _)
01651    *    (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _)
01652    *    (* * _ _ _ _ * * _ _ _ * _ _ _ _ * * *)
01653    *    (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
01654    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01655    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01656    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01657    */
01658   const int g28[] = {
01659     // Width and height of crossword grid
01660     19, 19,
01661     // Number of black fields
01662     66,
01663     // Black field coordinates
01664     0,4, 0,9, 0,14, 1,4, 1,9, 1,14, 2,4, 3,7, 3,11, 3,15, 4,0, 4,1, 4,2, 4,7, 4,11, 4,12, 4,16, 4,17, 4,18, 5,6, 5,10, 6,5, 6,9, 6,14, 7,4, 7,8, 7,14, 8,7, 8,13, 9,0, 9,1, 9,2, 9,6, 9,12, 9,16, 9,17, 9,18, 10,5, 10,11, 11,4, 11,10, 11,14, 12,4, 12,9, 12,13, 13,8, 13,12, 14,0, 14,1, 14,2, 14,6, 14,7, 14,11, 14,16, 14,17, 14,18, 15,3, 15,7, 15,11, 16,14, 17,4, 17,9, 17,14, 18,4, 18,9, 18,14, 
01665     // Length and number of words of that length
01666     15, 2,
01667     // Coordinates where words start and direction (0 = horizontal)
01668     0,3,0, 4,15,0, 
01669     // Length and number of words of that length
01670     14, 2,
01671     // Coordinates where words start and direction (0 = horizontal)
01672     2,5,1, 16,0,1, 
01673     // Length and number of words of that length
01674     8, 4,
01675     // Coordinates where words start and direction (0 = horizontal)
01676     0,13,0, 5,11,1, 11,5,0, 13,0,1, 
01677     // Length and number of words of that length
01678     7, 6,
01679     // Coordinates where words start and direction (0 = horizontal)
01680     0,8,0, 3,0,1, 8,0,1, 10,12,1, 12,10,0, 15,12,1, 
01681     // Length and number of words of that length
01682     6, 4,
01683     // Coordinates where words start and direction (0 = horizontal)
01684     0,5,0, 5,0,1, 13,13,0, 13,13,1, 
01685     // Length and number of words of that length
01686     5, 18,
01687     // Coordinates where words start and direction (0 = horizontal)
01688     0,6,0, 0,10,0, 5,11,0, 6,0,1, 6,10,0, 7,9,0, 7,9,1, 8,8,0, 8,8,1, 8,14,1, 9,7,0, 9,7,1, 10,0,1, 10,6,1, 11,5,1, 12,14,1, 14,8,0, 14,12,0, 
01689     // Length and number of words of that length
01690     4, 62,
01691     // Coordinates where words start and direction (0 = horizontal)
01692     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,5,1, 0,10,1, 0,12,0, 0,15,1, 0,16,0, 0,17,0, 0,18,0, 1,0,1, 1,5,1, 1,10,1, 1,15,1, 2,0,1, 2,9,0, 2,14,0, 3,4,0, 4,3,1, 5,0,0, 5,1,0, 5,2,0, 5,12,0, 5,16,0, 5,17,0, 5,18,0, 6,10,1, 6,15,1, 7,0,1, 7,15,1, 10,0,0, 10,1,0, 10,2,0, 10,6,0, 10,16,0, 10,17,0, 10,18,0, 11,0,1, 11,15,1, 12,0,1, 12,5,1, 12,14,0, 13,4,0, 13,9,0, 14,12,1, 15,0,0, 15,1,0, 15,2,0, 15,6,0, 15,16,0, 15,17,0, 15,18,0, 16,15,1, 17,0,1, 17,5,1, 17,10,1, 17,15,1, 18,0,1, 18,5,1, 18,10,1, 18,15,1, 
01693     // Length and number of words of that length
01694     3, 32,
01695     // Coordinates where words start and direction (0 = horizontal)
01696     0,7,0, 0,11,0, 0,15,0, 3,8,1, 3,12,1, 3,16,1, 4,8,1, 4,13,1, 5,7,0, 5,7,1, 6,6,0, 6,6,1, 7,5,0, 7,5,1, 8,4,0, 8,14,0, 9,3,1, 9,13,0, 9,13,1, 10,12,0, 11,11,0, 11,11,1, 12,10,1, 13,9,1, 14,3,1, 14,8,1, 15,0,1, 15,4,1, 15,8,1, 16,3,0, 16,7,0, 16,11,0, 
01697     // End marker
01698     0
01699   };
01700 
01701 
01702   /*
01703    * Name: 19.10, 19 x 19
01704    *    (_ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _ _)
01705    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01706    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
01707    *    (_ _ _ _ _ _ _ * _ _ _ _ * * _ _ _ _ *)
01708    *    (* * * _ _ _ * _ _ _ _ * _ _ _ _ * * *)
01709    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
01710    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _)
01711    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01712    *    (* _ _ _ _ _ _ * _ _ _ _ * * _ _ _ _ _)
01713    *    (* * * _ _ _ _ _ _ _ _ _ _ _ _ _ * * *)
01714    *    (_ _ _ _ _ * * _ _ _ _ * _ _ _ _ _ _ *)
01715    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
01716    *    (_ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _ _)
01717    *    (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01718    *    (* * * _ _ _ _ * _ _ _ _ * _ _ _ * * *)
01719    *    (* _ _ _ _ * * _ _ _ _ * _ _ _ _ _ _ _)
01720    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
01721    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
01722    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _)
01723    */
01724   const int g29[] = {
01725     // Width and height of crossword grid
01726     19, 19,
01727     // Number of black fields
01728     70,
01729     // Black field coordinates
01730     0,4, 0,8, 0,9, 0,14, 0,15, 1,4, 1,9, 1,14, 2,4, 2,9, 2,14, 3,0, 3,7, 3,12, 4,0, 4,1, 4,6, 4,11, 4,12, 4,17, 4,18, 5,5, 5,10, 5,15, 6,4, 6,10, 6,15, 7,3, 7,8, 7,14, 8,7, 8,13, 9,0, 9,1, 9,6, 9,12, 9,17, 9,18, 10,5, 10,11, 11,4, 11,10, 11,15, 12,3, 12,8, 12,14, 13,3, 13,8, 13,13, 14,0, 14,1, 14,6, 14,7, 14,12, 14,17, 14,18, 15,6, 15,11, 15,18, 16,4, 16,9, 16,14, 17,4, 17,9, 17,14, 18,3, 18,4, 18,9, 18,10, 18,14, 
01731     // Length and number of words of that length
01732     19, 2,
01733     // Coordinates where words start and direction (0 = horizontal)
01734     0,2,0, 0,16,0, 
01735     // Length and number of words of that length
01736     13, 1,
01737     // Coordinates where words start and direction (0 = horizontal)
01738     3,9,0, 
01739     // Length and number of words of that length
01740     8, 2,
01741     // Coordinates where words start and direction (0 = horizontal)
01742     0,13,0, 11,5,0, 
01743     // Length and number of words of that length
01744     7, 4,
01745     // Coordinates where words start and direction (0 = horizontal)
01746     0,3,0, 8,0,1, 10,12,1, 12,15,0, 
01747     // Length and number of words of that length
01748     6, 6,
01749     // Coordinates where words start and direction (0 = horizontal)
01750     1,8,0, 3,1,1, 3,13,1, 12,10,0, 15,0,1, 15,12,1, 
01751     // Length and number of words of that length
01752     5, 17,
01753     // Coordinates where words start and direction (0 = horizontal)
01754     0,5,0, 0,10,0, 5,0,1, 5,11,0, 6,5,1, 7,9,1, 8,8,1, 8,14,1, 9,7,0, 9,7,1, 10,0,1, 10,6,1, 11,5,1, 12,9,1, 13,14,1, 14,8,0, 14,13,0, 
01755     // Length and number of words of that length
01756     4, 78,
01757     // Coordinates where words start and direction (0 = horizontal)
01758     0,0,1, 0,1,0, 0,6,0, 0,10,1, 0,11,0, 0,17,0, 0,18,0, 1,0,1, 1,5,1, 1,10,1, 1,15,0, 1,15,1, 2,0,1, 2,5,1, 2,10,1, 2,15,1, 3,8,1, 3,14,0, 4,2,1, 4,7,0, 4,7,1, 4,13,1, 5,0,0, 5,1,0, 5,6,0, 5,6,1, 5,11,1, 5,12,0, 5,17,0, 5,18,0, 6,0,1, 6,5,0, 6,11,1, 7,4,0, 7,4,1, 7,10,0, 7,15,0, 7,15,1, 8,3,0, 8,8,0, 8,14,0, 9,2,1, 9,13,0, 9,13,1, 10,0,0, 10,1,0, 10,6,0, 10,12,0, 10,17,0, 10,18,0, 11,0,1, 11,11,0, 11,11,1, 12,4,0, 12,4,1, 12,15,1, 13,4,1, 13,9,1, 14,2,1, 14,3,0, 14,8,1, 14,13,1, 15,0,0, 15,1,0, 15,7,0, 15,7,1, 15,12,0, 15,17,0, 16,0,1, 16,5,1, 16,10,1, 16,15,1, 17,0,1, 17,5,1, 17,10,1, 17,15,1, 18,5,1, 18,15,1, 
01759     // Length and number of words of that length
01760     3, 18,
01761     // Coordinates where words start and direction (0 = horizontal)
01762     0,0,0, 0,5,1, 0,7,0, 0,12,0, 0,16,1, 3,4,0, 5,16,1, 6,16,1, 7,0,1, 11,16,1, 12,0,1, 13,0,1, 13,14,0, 16,6,0, 16,11,0, 16,18,0, 18,0,1, 18,11,1, 
01763     // End marker
01764     0
01765   };
01766 
01767 
01768   /*
01769    * Name: 21.01, 21 x 21
01770    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01771    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01772    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
01773    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01774    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
01775    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
01776    *    (_ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
01777    *    (_ _ _ _ * _ _ _ _ * * * _ _ _ _ * _ _ _ _)
01778    *    (_ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
01779    *    (_ _ _ _ _ _ _ _ * _ _ _ _ * * _ _ _ _ _ _)
01780    *    (* * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * *)
01781    *    (_ _ _ _ _ _ * * _ _ _ _ * _ _ _ _ _ _ _ _)
01782    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _)
01783    *    (_ _ _ _ * _ _ _ _ * * * _ _ _ _ * _ _ _ _)
01784    *    (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _)
01785    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
01786    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
01787    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
01788    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
01789    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01790    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01791    */
01792   const int g30[] = {
01793     // Width and height of crossword grid
01794     21, 21,
01795     // Number of black fields
01796     68,
01797     // Black field coordinates
01798     0,4, 0,10, 0,16, 1,4, 1,10, 1,16, 2,4, 2,16, 3,8, 3,14, 4,0, 4,1, 4,7, 4,13, 5,6, 5,19, 5,20, 6,5, 6,11, 6,17, 7,4, 7,10, 7,11, 7,12, 7,16, 8,3, 8,9, 8,15, 9,7, 9,13, 10,0, 10,1, 10,2, 10,7, 10,13, 10,18, 10,19, 10,20, 11,7, 11,13, 12,5, 12,11, 12,17, 13,4, 13,8, 13,9, 13,10, 13,16, 14,3, 14,9, 14,15, 15,0, 15,1, 15,14, 16,7, 16,13, 16,19, 16,20, 17,6, 17,12, 18,4, 18,16, 19,4, 19,10, 19,16, 20,4, 20,10, 20,16, 
01799     // Length and number of words of that length
01800     12, 2,
01801     // Coordinates where words start and direction (0 = horizontal)
01802     5,7,1, 15,2,1, 
01803     // Length and number of words of that length
01804     11, 4,
01805     // Coordinates where words start and direction (0 = horizontal)
01806     2,5,1, 4,14,0, 6,6,0, 18,5,1, 
01807     // Length and number of words of that length
01808     10, 4,
01809     // Coordinates where words start and direction (0 = horizontal)
01810     0,2,0, 0,18,0, 11,2,0, 11,18,0, 
01811     // Length and number of words of that length
01812     9, 2,
01813     // Coordinates where words start and direction (0 = horizontal)
01814     4,8,0, 8,12,0, 
01815     // Length and number of words of that length
01816     8, 8,
01817     // Coordinates where words start and direction (0 = horizontal)
01818     0,3,0, 0,9,0, 0,15,0, 3,0,1, 13,5,0, 13,11,0, 13,17,0, 17,13,1, 
01819     // Length and number of words of that length
01820     7, 8,
01821     // Coordinates where words start and direction (0 = horizontal)
01822     0,12,0, 4,14,1, 9,0,1, 9,14,1, 11,0,1, 11,14,1, 14,8,0, 16,0,1, 
01823     // Length and number of words of that length
01824     6, 10,
01825     // Coordinates where words start and direction (0 = horizontal)
01826     0,5,0, 0,11,0, 0,17,0, 3,15,1, 5,0,1, 15,3,0, 15,9,0, 15,15,0, 15,15,1, 17,0,1, 
01827     // Length and number of words of that length
01828     5, 50,
01829     // Coordinates where words start and direction (0 = horizontal)
01830     0,5,1, 0,6,0, 0,11,1, 0,19,0, 0,20,0, 1,5,1, 1,11,1, 2,10,0, 3,9,1, 4,2,1, 4,8,1, 5,0,0, 5,1,0, 6,0,1, 6,6,1, 6,12,1, 7,5,0, 7,5,1, 7,17,0, 8,4,0, 8,4,1, 8,10,0, 8,10,1, 8,16,0, 8,16,1, 9,3,0, 9,8,1, 9,15,0, 10,8,1, 11,8,1, 11,19,0, 11,20,0, 12,0,1, 12,6,1, 12,12,1, 13,11,1, 14,4,1, 14,10,0, 14,10,1, 14,16,1, 16,0,0, 16,1,0, 16,8,1, 16,14,0, 16,14,1, 17,7,1, 19,5,1, 19,11,1, 20,5,1, 20,11,1, 
01831     // Length and number of words of that length
01832     4, 40,
01833     // Coordinates where words start and direction (0 = horizontal)
01834     0,0,0, 0,0,1, 0,1,0, 0,7,0, 0,13,0, 0,17,1, 1,0,1, 1,17,1, 2,0,1, 2,17,1, 3,4,0, 3,16,0, 5,7,0, 5,13,0, 6,19,0, 6,20,0, 7,0,1, 7,17,1, 8,11,0, 9,9,0, 10,3,1, 10,14,1, 11,0,0, 11,1,0, 12,7,0, 12,13,0, 13,0,1, 13,17,1, 14,4,0, 14,16,0, 17,7,0, 17,13,0, 17,19,0, 17,20,0, 18,0,1, 18,17,1, 19,0,1, 19,17,1, 20,0,1, 20,17,1, 
01835     // Length and number of words of that length
01836     3, 10,
01837     // Coordinates where words start and direction (0 = horizontal)
01838     0,8,0, 0,14,0, 6,18,1, 7,13,1, 8,0,1, 12,18,1, 13,5,1, 14,0,1, 18,6,0, 18,12,0, 
01839     // End marker
01840     0
01841   };
01842 
01843 
01844   /*
01845    * Name: 21.02, 21 x 21
01846    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01847    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01848    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01849    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
01850    *    (* * * _ _ _ _ _ * _ _ _ * _ _ _ _ _ * * *)
01851    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _)
01852    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
01853    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01854    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _)
01855    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _)
01856    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
01857    *    (_ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _)
01858    *    (_ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
01859    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
01860    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
01861    *    (_ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
01862    *    (* * * _ _ _ _ _ * _ _ _ * _ _ _ _ _ * * *)
01863    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01864    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01865    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01866    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01867    */
01868   const int g31[] = {
01869     // Width and height of crossword grid
01870     21, 21,
01871     // Number of black fields
01872     72,
01873     // Black field coordinates
01874     0,4, 0,10, 0,16, 1,4, 1,10, 1,16, 2,4, 2,10, 2,16, 3,9, 3,15, 4,0, 4,1, 4,2, 4,8, 4,12, 4,18, 4,19, 4,20, 5,3, 5,7, 5,13, 6,6, 6,14, 7,5, 7,10, 7,15, 8,4, 8,9, 8,16, 9,8, 9,17, 10,0, 10,1, 10,2, 10,7, 10,13, 10,18, 10,19, 10,20, 11,3, 11,12, 12,4, 12,11, 12,16, 13,5, 13,10, 13,15, 14,6, 14,14, 15,7, 15,13, 15,17, 16,0, 16,1, 16,2, 16,8, 16,12, 16,18, 16,19, 16,20, 17,5, 17,11, 18,4, 18,10, 18,16, 19,4, 19,10, 19,16, 20,4, 20,10, 20,16, 
01875     // Length and number of words of that length
01876     12, 2,
01877     // Coordinates where words start and direction (0 = horizontal)
01878     0,11,0, 9,9,0, 
01879     // Length and number of words of that length
01880     9, 4,
01881     // Coordinates where words start and direction (0 = horizontal)
01882     0,17,0, 3,0,1, 12,3,0, 17,12,1, 
01883     // Length and number of words of that length
01884     8, 4,
01885     // Coordinates where words start and direction (0 = horizontal)
01886     9,0,1, 9,9,1, 11,4,1, 11,13,1, 
01887     // Length and number of words of that length
01888     7, 8,
01889     // Coordinates where words start and direction (0 = horizontal)
01890     0,5,0, 5,14,1, 6,7,1, 7,6,0, 7,14,0, 14,7,1, 14,15,0, 15,0,1, 
01891     // Length and number of words of that length
01892     6, 12,
01893     // Coordinates where words start and direction (0 = horizontal)
01894     0,6,0, 0,14,0, 5,12,0, 6,0,1, 6,15,1, 8,10,1, 10,8,0, 12,5,1, 14,0,1, 14,15,1, 15,6,0, 15,14,0, 
01895     // Length and number of words of that length
01896     5, 54,
01897     // Coordinates where words start and direction (0 = horizontal)
01898     0,3,0, 0,5,1, 0,7,0, 0,11,1, 0,13,0, 1,5,1, 1,11,1, 2,5,1, 2,11,1, 3,4,0, 3,10,1, 3,16,0, 3,16,1, 4,3,1, 4,13,1, 5,0,0, 5,1,0, 5,2,0, 5,8,1, 5,18,0, 5,19,0, 5,20,0, 6,3,0, 7,0,1, 7,16,1, 8,5,0, 8,10,0, 8,15,0, 10,8,1, 10,17,0, 11,0,0, 11,1,0, 11,2,0, 11,18,0, 11,19,0, 11,20,0, 13,0,1, 13,4,0, 13,16,0, 13,16,1, 15,8,1, 16,3,1, 16,7,0, 16,13,0, 16,13,1, 16,17,0, 17,0,1, 17,6,1, 18,5,1, 18,11,1, 19,5,1, 19,11,1, 20,5,1, 20,11,1, 
01899     // Length and number of words of that length
01900     4, 50,
01901     // Coordinates where words start and direction (0 = horizontal)
01902     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,8,0, 0,12,0, 0,17,1, 0,18,0, 0,19,0, 0,20,0, 1,0,1, 1,17,1, 2,0,1, 2,17,1, 3,10,0, 4,9,0, 5,8,0, 6,7,0, 6,13,0, 7,6,1, 7,11,1, 8,0,1, 8,5,1, 8,17,1, 10,3,1, 10,14,1, 11,7,0, 11,13,0, 12,0,1, 12,12,0, 12,12,1, 12,17,1, 13,6,1, 13,11,0, 13,11,1, 14,10,0, 17,0,0, 17,1,0, 17,2,0, 17,8,0, 17,12,0, 17,18,0, 17,19,0, 17,20,0, 18,0,1, 18,17,1, 19,0,1, 19,17,1, 20,0,1, 20,17,1, 
01903     // Length and number of words of that length
01904     3, 16,
01905     // Coordinates where words start and direction (0 = horizontal)
01906     0,9,0, 0,15,0, 4,9,1, 4,15,0, 5,0,1, 5,4,1, 9,4,0, 9,16,0, 9,18,1, 11,0,1, 14,5,0, 15,14,1, 15,18,1, 16,9,1, 18,5,0, 18,11,0, 
01907     // End marker
01908     0
01909   };
01910 
01911 
01912   /*
01913    * Name: 21.03, 21 x 21
01914    *    (_ _ _ _ * * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01915    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01916    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01917    *    (_ _ _ * _ _ _ _ _ * * _ _ _ _ _ _ _ _ * *)
01918    *    (_ _ _ _ _ * _ _ _ _ _ * * _ _ _ _ * _ _ _)
01919    *    (* * _ _ _ * _ _ _ _ _ * _ _ _ _ * * _ _ _)
01920    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ _)
01921    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
01922    *    (_ _ _ _ * _ _ _ * _ _ _ _ * _ _ _ _ _ _ *)
01923    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ * * *)
01924    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
01925    *    (* * * _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
01926    *    (* _ _ _ _ _ _ * _ _ _ _ * _ _ _ * _ _ _ _)
01927    *    (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ _)
01928    *    (_ _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ _ _)
01929    *    (_ _ _ * * _ _ _ _ * _ _ _ _ _ * _ _ _ * *)
01930    *    (_ _ _ * _ _ _ _ * * _ _ _ _ _ * _ _ _ _ _)
01931    *    (* * _ _ _ _ _ _ _ _ * * _ _ _ _ _ * _ _ _)
01932    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
01933    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
01934    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * * _ _ _ _)
01935    */
01936   const int g32[] = {
01937     // Width and height of crossword grid
01938     21, 21,
01939     // Number of black fields
01940     79,
01941     // Black field coordinates
01942     0,5, 0,11, 0,12, 0,17, 1,5, 1,11, 1,17, 2,11, 3,3, 3,10, 3,15, 3,16, 4,0, 4,1, 4,2, 4,8, 4,9, 4,15, 5,0, 5,4, 5,5, 5,14, 5,18, 5,19, 5,20, 6,6, 6,13, 7,7, 7,12, 8,8, 8,16, 9,0, 9,1, 9,2, 9,3, 9,9, 9,15, 9,16, 10,3, 10,10, 10,17, 11,4, 11,5, 11,11, 11,17, 11,18, 11,19, 11,20, 12,4, 12,12, 13,8, 13,13, 14,7, 14,14, 15,0, 15,1, 15,2, 15,6, 15,15, 15,16, 15,20, 16,5, 16,11, 16,12, 16,18, 16,19, 16,20, 17,4, 17,5, 17,10, 17,17, 18,9, 19,3, 19,9, 19,15, 20,3, 20,8, 20,9, 20,15, 
01943     // Length and number of words of that length
01944     11, 2,
01945     // Coordinates where words start and direction (0 = horizontal)
01946     2,0,1, 18,10,1, 
01947     // Length and number of words of that length
01948     9, 2,
01949     // Coordinates where words start and direction (0 = horizontal)
01950     2,12,1, 18,0,1, 
01951     // Length and number of words of that length
01952     8, 12,
01953     // Coordinates where words start and direction (0 = horizontal)
01954     2,17,0, 3,11,0, 5,6,1, 6,14,0, 7,6,0, 7,13,1, 8,0,1, 10,9,0, 11,3,0, 12,13,1, 13,0,1, 15,7,1, 
01955     // Length and number of words of that length
01956     7, 8,
01957     // Coordinates where words start and direction (0 = horizontal)
01958     0,7,0, 6,14,1, 7,0,1, 8,9,1, 12,5,1, 13,14,1, 14,0,1, 14,13,0, 
01959     // Length and number of words of that length
01960     6, 18,
01961     // Coordinates where words start and direction (0 = horizontal)
01962     0,6,0, 0,13,0, 1,12,0, 3,4,1, 4,10,0, 6,0,1, 6,7,1, 7,13,0, 8,7,0, 10,4,1, 10,11,1, 11,10,0, 14,8,0, 14,8,1, 14,15,1, 15,7,0, 15,14,0, 17,11,1, 
01963     // Length and number of words of that length
01964     5, 42,
01965     // Coordinates where words start and direction (0 = horizontal)
01966     0,0,1, 0,4,0, 0,6,1, 0,14,0, 0,18,0, 0,19,0, 0,20,0, 1,0,1, 1,6,1, 1,12,1, 4,3,0, 4,3,1, 4,10,1, 4,16,1, 6,4,0, 6,5,0, 6,18,0, 6,19,0, 6,20,0, 9,4,1, 9,10,1, 10,0,0, 10,1,0, 10,2,0, 10,15,0, 10,16,0, 11,6,1, 11,12,1, 12,17,0, 16,0,0, 16,0,1, 16,1,0, 16,2,0, 16,6,0, 16,6,1, 16,13,1, 16,16,0, 19,4,1, 19,10,1, 19,16,1, 20,10,1, 20,16,1, 
01967     // Length and number of words of that length
01968     4, 34,
01969     // Coordinates where words start and direction (0 = horizontal)
01970     0,0,0, 0,1,0, 0,2,0, 0,8,0, 0,9,0, 0,13,1, 3,11,1, 3,17,1, 4,16,0, 5,1,0, 5,2,0, 5,9,0, 5,15,0, 7,8,1, 8,12,0, 8,17,1, 9,8,0, 9,17,1, 11,0,1, 12,0,1, 12,5,0, 12,11,0, 12,18,0, 12,19,0, 13,4,0, 13,9,1, 17,0,1, 17,6,1, 17,11,0, 17,12,0, 17,18,0, 17,19,0, 17,20,0, 20,4,1, 
01971     // Length and number of words of that length
01972     3, 26,
01973     // Coordinates where words start and direction (0 = horizontal)
01974     0,3,0, 0,10,0, 0,15,0, 0,16,0, 0,18,1, 1,18,1, 2,5,0, 3,0,1, 5,1,1, 5,8,0, 5,15,1, 6,0,0, 10,0,1, 10,18,1, 12,20,0, 13,12,0, 15,3,1, 15,17,1, 16,15,0, 17,18,1, 18,4,0, 18,5,0, 18,10,0, 18,17,0, 19,0,1, 20,0,1, 
01975     // End marker
01976     0
01977   };
01978 
01979 
01980   /*
01981    * Name: 21.04, 21 x 21
01982    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
01983    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
01984    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
01985    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
01986    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01987    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01988    *    (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
01989    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
01990    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
01991    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
01992    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01993    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
01994    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
01995    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
01996    *    (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
01997    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
01998    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
01999    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
02000    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02001    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02002    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02003    */
02004   const int g33[] = {
02005     // Width and height of crossword grid
02006     21, 21,
02007     // Number of black fields
02008     63,
02009     // Black field coordinates
02010     0,7, 0,13, 1,7, 1,13, 2,7, 2,13, 3,3, 3,11, 3,17, 4,4, 4,10, 4,16, 5,5, 5,9, 5,15, 6,8, 6,12, 7,0, 7,1, 7,2, 7,7, 7,13, 7,18, 7,19, 7,20, 8,6, 8,14, 9,5, 9,11, 9,17, 10,4, 10,10, 10,16, 11,3, 11,9, 11,15, 12,6, 12,14, 13,0, 13,1, 13,2, 13,7, 13,13, 13,18, 13,19, 13,20, 14,8, 14,12, 15,5, 15,11, 15,15, 16,4, 16,10, 16,16, 17,3, 17,9, 17,17, 18,7, 18,13, 19,7, 19,13, 20,7, 20,13, 
02011     // Length and number of words of that length
02012     8, 8,
02013     // Coordinates where words start and direction (0 = horizontal)
02014     0,6,0, 0,14,0, 6,0,1, 6,13,1, 13,6,0, 13,14,0, 14,0,1, 14,13,1, 
02015     // Length and number of words of that length
02016     7, 32,
02017     // Coordinates where words start and direction (0 = horizontal)
02018     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,14,1, 0,18,0, 0,19,0, 0,20,0, 1,0,1, 1,14,1, 2,0,1, 2,14,1, 3,4,1, 4,3,0, 7,8,0, 7,12,0, 8,7,1, 10,17,0, 12,7,1, 14,0,0, 14,1,0, 14,2,0, 14,18,0, 14,19,0, 14,20,0, 17,10,1, 18,0,1, 18,14,1, 19,0,1, 19,14,1, 20,0,1, 20,14,1, 
02019     // Length and number of words of that length
02020     6, 8,
02021     // Coordinates where words start and direction (0 = horizontal)
02022     0,8,0, 0,12,0, 8,0,1, 8,15,1, 12,0,1, 12,15,1, 15,8,0, 15,12,0, 
02023     // Length and number of words of that length
02024     5, 56,
02025     // Coordinates where words start and direction (0 = horizontal)
02026     0,5,0, 0,8,1, 0,9,0, 0,15,0, 1,8,1, 2,8,1, 3,12,1, 4,5,1, 4,11,0, 4,11,1, 4,17,0, 5,0,1, 5,4,0, 5,10,0, 5,10,1, 5,16,0, 5,16,1, 6,9,0, 6,15,0, 7,8,1, 8,0,0, 8,1,0, 8,2,0, 8,7,0, 8,13,0, 8,18,0, 8,19,0, 8,20,0, 9,0,1, 9,6,1, 9,12,1, 10,5,0, 10,5,1, 10,11,0, 10,11,1, 11,4,0, 11,4,1, 11,10,0, 11,10,1, 11,16,0, 11,16,1, 12,3,0, 12,9,0, 13,8,1, 15,0,1, 15,6,1, 15,16,1, 16,5,0, 16,5,1, 16,11,0, 16,11,1, 16,15,0, 17,4,1, 18,8,1, 19,8,1, 20,8,1, 
02027     // Length and number of words of that length
02028     4, 20,
02029     // Coordinates where words start and direction (0 = horizontal)
02030     0,4,0, 0,10,0, 0,16,0, 3,7,0, 3,13,0, 4,0,1, 4,17,1, 7,3,1, 7,14,1, 10,0,1, 10,17,1, 13,3,1, 13,14,1, 14,7,0, 14,13,0, 16,0,1, 16,17,1, 17,4,0, 17,10,0, 17,16,0, 
02031     // Length and number of words of that length
02032     3, 20,
02033     // Coordinates where words start and direction (0 = horizontal)
02034     0,3,0, 0,11,0, 0,17,0, 3,0,1, 3,18,1, 5,6,1, 6,5,0, 6,9,1, 9,6,0, 9,14,0, 9,18,1, 11,0,1, 12,15,0, 14,9,1, 15,12,1, 17,0,1, 17,18,1, 18,3,0, 18,9,0, 18,17,0, 
02035     // End marker
02036     0
02037   };
02038 
02039 
02040   /*
02041    * Name: 21.05, 21 x 21
02042    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02043    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02044    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02045    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
02046    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02047    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02048    *    (* * * _ _ _ * * * _ _ _ * * * _ _ _ * * *)
02049    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02050    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02051    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02052    *    (_ _ _ _ * _ _ _ _ * * * _ _ _ _ * _ _ _ _)
02053    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _)
02054    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02055    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02056    *    (* * * _ _ _ * * * _ _ _ * * * _ _ _ * * *)
02057    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
02058    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02059    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
02060    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02061    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02062    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02063    */
02064   const int g34[] = {
02065     // Width and height of crossword grid
02066     21, 21,
02067     // Number of black fields
02068     73,
02069     // Black field coordinates
02070     0,6, 0,14, 1,6, 1,14, 2,6, 2,14, 3,3, 3,9, 3,17, 4,4, 4,10, 4,16, 5,5, 5,11, 5,15, 6,0, 6,1, 6,2, 6,6, 6,7, 6,8, 6,12, 6,13, 6,14, 6,18, 6,19, 6,20, 7,6, 7,14, 8,6, 8,14, 9,5, 9,10, 9,17, 10,4, 10,9, 10,10, 10,11, 10,16, 11,3, 11,10, 11,15, 12,6, 12,14, 13,6, 13,14, 14,0, 14,1, 14,2, 14,6, 14,7, 14,8, 14,12, 14,13, 14,14, 14,18, 14,19, 14,20, 15,5, 15,9, 15,15, 16,4, 16,10, 16,16, 17,3, 17,11, 17,17, 18,6, 18,14, 19,6, 19,14, 20,6, 20,14, 
02071     // Length and number of words of that length
02072     7, 24,
02073     // Coordinates where words start and direction (0 = horizontal)
02074     0,7,1, 1,7,1, 2,7,1, 3,10,1, 4,3,0, 7,0,0, 7,1,0, 7,2,0, 7,7,0, 7,7,1, 7,8,0, 7,12,0, 7,13,0, 7,18,0, 7,19,0, 7,20,0, 8,7,1, 10,17,0, 12,7,1, 13,7,1, 17,4,1, 18,7,1, 19,7,1, 20,7,1, 
02075     // Length and number of words of that length
02076     6, 44,
02077     // Coordinates where words start and direction (0 = horizontal)
02078     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,7,0, 0,8,0, 0,12,0, 0,13,0, 0,15,1, 0,18,0, 0,19,0, 0,20,0, 1,0,1, 1,15,1, 2,0,1, 2,15,1, 4,9,0, 7,0,1, 7,15,1, 8,0,1, 8,15,1, 9,11,1, 11,4,1, 11,11,0, 12,0,1, 12,15,1, 13,0,1, 13,15,1, 15,0,0, 15,1,0, 15,2,0, 15,7,0, 15,8,0, 15,12,0, 15,13,0, 15,18,0, 15,19,0, 15,20,0, 18,0,1, 18,15,1, 19,0,1, 19,15,1, 20,0,1, 20,15,1, 
02079     // Length and number of words of that length
02080     5, 28,
02081     // Coordinates where words start and direction (0 = horizontal)
02082     0,5,0, 0,11,0, 0,15,0, 3,4,1, 4,5,1, 4,11,1, 4,17,0, 5,0,1, 5,4,0, 5,6,1, 5,16,0, 5,16,1, 6,15,0, 9,0,1, 10,5,0, 11,4,0, 11,16,0, 11,16,1, 12,3,0, 15,0,1, 15,10,1, 15,16,1, 16,5,0, 16,5,1, 16,9,0, 16,11,1, 16,15,0, 17,12,1, 
02083     // Length and number of words of that length
02084     4, 20,
02085     // Coordinates where words start and direction (0 = horizontal)
02086     0,4,0, 0,10,0, 0,16,0, 4,0,1, 4,17,1, 5,10,0, 6,11,0, 9,6,1, 10,0,1, 10,5,1, 10,12,1, 10,17,1, 11,9,0, 11,11,1, 12,10,0, 16,0,1, 16,17,1, 17,4,0, 17,10,0, 17,16,0, 
02087     // Length and number of words of that length
02088     3, 28,
02089     // Coordinates where words start and direction (0 = horizontal)
02090     0,3,0, 0,9,0, 0,17,0, 3,0,1, 3,6,0, 3,14,0, 3,18,1, 5,12,1, 6,3,1, 6,5,0, 6,9,1, 6,15,1, 9,6,0, 9,14,0, 9,18,1, 11,0,1, 12,15,0, 14,3,1, 14,9,1, 14,15,1, 15,6,0, 15,6,1, 15,14,0, 17,0,1, 17,18,1, 18,3,0, 18,11,0, 18,17,0, 
02091     // End marker
02092     0
02093   };
02094 
02095 
02096   /*
02097    * Name: 21.06, 21 x 21
02098    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02099    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02100    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _)
02101    *    (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
02102    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
02103    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02104    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02105    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02106    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
02107    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02108    *    (* * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * *)
02109    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02110    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
02111    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02112    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
02113    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02114    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
02115    *    (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
02116    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _)
02117    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02118    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02119    */
02120   const int g35[] = {
02121     // Width and height of crossword grid
02122     21, 21,
02123     // Number of black fields
02124     68,
02125     // Black field coordinates
02126     0,4, 0,10, 0,16, 1,4, 1,10, 1,16, 2,4, 2,16, 3,8, 3,12, 4,0, 4,1, 4,2, 4,7, 4,13, 4,18, 4,19, 4,20, 5,6, 5,14, 6,5, 6,11, 6,15, 7,4, 7,10, 7,16, 8,3, 8,9, 8,17, 9,6, 9,12, 10,0, 10,1, 10,7, 10,13, 10,19, 10,20, 11,8, 11,14, 12,3, 12,11, 12,17, 13,4, 13,10, 13,16, 14,5, 14,9, 14,15, 15,6, 15,14, 16,0, 16,1, 16,2, 16,7, 16,13, 16,18, 16,19, 16,20, 17,8, 17,12, 18,4, 18,16, 19,4, 19,10, 19,16, 20,4, 20,10, 20,16, 
02127     // Length and number of words of that length
02128     11, 4,
02129     // Coordinates where words start and direction (0 = horizontal)
02130     2,5,1, 5,2,0, 5,18,0, 18,5,1, 
02131     // Length and number of words of that length
02132     8, 12,
02133     // Coordinates where words start and direction (0 = horizontal)
02134     0,3,0, 0,9,0, 0,17,0, 3,0,1, 3,13,1, 9,13,1, 11,0,1, 13,3,0, 13,11,0, 13,17,0, 17,0,1, 17,13,1, 
02135     // Length and number of words of that length
02136     7, 8,
02137     // Coordinates where words start and direction (0 = horizontal)
02138     4,8,0, 5,7,1, 7,5,0, 7,15,0, 8,10,1, 10,12,0, 12,4,1, 15,7,1, 
02139     // Length and number of words of that length
02140     6, 12,
02141     // Coordinates where words start and direction (0 = horizontal)
02142     0,5,0, 0,11,0, 0,15,0, 5,0,1, 5,15,1, 9,0,1, 11,15,1, 15,0,1, 15,5,0, 15,9,0, 15,15,0, 15,15,1, 
02143     // Length and number of words of that length
02144     5, 54,
02145     // Coordinates where words start and direction (0 = horizontal)
02146     0,5,1, 0,6,0, 0,11,1, 0,14,0, 1,5,1, 1,11,1, 2,10,0, 4,8,1, 4,12,0, 5,0,0, 5,1,0, 5,7,0, 5,13,0, 5,19,0, 5,20,0, 6,0,1, 6,6,1, 6,14,0, 6,16,1, 7,5,1, 7,11,0, 7,11,1, 8,4,0, 8,4,1, 8,10,0, 8,16,0, 9,7,1, 9,9,0, 10,2,1, 10,6,0, 10,8,1, 10,14,1, 11,0,0, 11,1,0, 11,7,0, 11,9,1, 11,13,0, 11,19,0, 11,20,0, 12,8,0, 12,12,1, 13,5,1, 13,11,1, 14,0,1, 14,10,0, 14,10,1, 14,16,1, 16,6,0, 16,8,1, 16,14,0, 19,5,1, 19,11,1, 20,5,1, 20,11,1, 
02147     // Length and number of words of that length
02148     4, 40,
02149     // Coordinates where words start and direction (0 = horizontal)
02150     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,7,0, 0,13,0, 0,17,1, 0,18,0, 0,19,0, 0,20,0, 1,0,1, 1,17,1, 2,0,1, 2,17,1, 3,4,0, 3,16,0, 4,3,1, 4,14,1, 7,0,1, 7,17,1, 13,0,1, 13,17,1, 14,4,0, 14,16,0, 16,3,1, 16,14,1, 17,0,0, 17,1,0, 17,2,0, 17,7,0, 17,13,0, 17,18,0, 17,19,0, 17,20,0, 18,0,1, 18,17,1, 19,0,1, 19,17,1, 20,0,1, 20,17,1, 
02151     // Length and number of words of that length
02152     3, 16,
02153     // Coordinates where words start and direction (0 = horizontal)
02154     0,8,0, 0,12,0, 3,9,1, 6,6,0, 6,12,1, 8,0,1, 8,18,1, 9,3,0, 9,17,0, 12,0,1, 12,14,0, 12,18,1, 14,6,1, 17,9,1, 18,8,0, 18,12,0, 
02155     // End marker
02156     0
02157   };
02158 
02159 
02160   /*
02161    * Name: 21.07, 21 x 21
02162    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02163    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02164    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
02165    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02166    *    (* * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * *)
02167    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
02168    *    (_ _ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _ _)
02169    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02170    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ _)
02171    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02172    *    (* * * _ _ _ _ _ * * * * * _ _ _ _ _ * * *)
02173    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _)
02174    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ _)
02175    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02176    *    (_ _ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _ _)
02177    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
02178    *    (* * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * *)
02179    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
02180    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
02181    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02182    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02183    */
02184   const int g36[] = {
02185     // Width and height of crossword grid
02186     21, 21,
02187     // Number of black fields
02188     73,
02189     // Black field coordinates
02190     0,4, 0,10, 0,16, 1,4, 1,10, 1,16, 2,10, 3,5, 3,9, 3,15, 4,0, 4,1, 4,6, 4,14, 4,19, 4,20, 5,3, 5,11, 5,17, 6,4, 6,8, 6,12, 6,16, 7,7, 7,13, 8,6, 8,10, 8,14, 9,3, 9,10, 9,15, 10,0, 10,1, 10,2, 10,8, 10,9, 10,10, 10,11, 10,12, 10,18, 10,19, 10,20, 11,5, 11,10, 11,17, 12,6, 12,10, 12,14, 13,7, 13,13, 14,4, 14,8, 14,12, 14,16, 15,3, 15,9, 15,17, 16,0, 16,1, 16,6, 16,14, 16,19, 16,20, 17,5, 17,11, 17,15, 18,10, 19,4, 19,10, 19,16, 20,4, 20,10, 20,16, 
02191     // Length and number of words of that length
02192     10, 8,
02193     // Coordinates where words start and direction (0 = horizontal)
02194     0,2,0, 0,18,0, 2,0,1, 2,11,1, 11,2,0, 11,18,0, 18,0,1, 18,11,1, 
02195     // Length and number of words of that length
02196     7, 16,
02197     // Coordinates where words start and direction (0 = horizontal)
02198     0,7,0, 0,13,0, 4,5,0, 4,7,1, 5,4,1, 7,0,1, 7,4,0, 7,14,1, 7,16,0, 10,15,0, 13,0,1, 13,14,1, 14,7,0, 14,13,0, 15,10,1, 16,7,1, 
02199     // Length and number of words of that length
02200     6, 12,
02201     // Coordinates where words start and direction (0 = horizontal)
02202     0,8,0, 0,12,0, 4,9,0, 8,0,1, 8,15,1, 9,4,1, 11,11,0, 11,11,1, 12,0,1, 12,15,1, 15,8,0, 15,12,0, 
02203     // Length and number of words of that length
02204     5, 44,
02205     // Coordinates where words start and direction (0 = horizontal)
02206     0,3,0, 0,5,1, 0,11,0, 0,11,1, 0,17,0, 1,5,1, 1,11,1, 3,0,1, 3,10,0, 3,10,1, 3,16,1, 4,15,0, 5,0,0, 5,1,0, 5,12,1, 5,19,0, 5,20,0, 6,17,0, 7,8,1, 8,7,0, 8,13,0, 9,16,1, 10,3,0, 10,3,1, 10,13,1, 11,0,0, 11,0,1, 11,1,0, 11,19,0, 11,20,0, 12,5,0, 13,8,1, 13,10,0, 15,4,1, 16,3,0, 16,9,0, 16,17,0, 17,0,1, 17,6,1, 17,16,1, 19,5,1, 19,11,1, 20,5,1, 20,11,1, 
02207     // Length and number of words of that length
02208     4, 36,
02209     // Coordinates where words start and direction (0 = horizontal)
02210     0,0,0, 0,0,1, 0,1,0, 0,6,0, 0,14,0, 0,17,1, 0,19,0, 0,20,0, 1,0,1, 1,17,1, 2,4,0, 2,16,0, 4,2,1, 4,15,1, 6,0,1, 6,11,0, 6,17,1, 9,11,1, 11,6,1, 11,9,0, 14,0,1, 14,17,1, 15,4,0, 15,16,0, 16,2,1, 16,15,1, 17,0,0, 17,1,0, 17,6,0, 17,14,0, 17,19,0, 17,20,0, 19,0,1, 19,17,1, 20,0,1, 20,17,1, 
02211     // Length and number of words of that length
02212     3, 36,
02213     // Coordinates where words start and direction (0 = horizontal)
02214     0,5,0, 0,9,0, 0,15,0, 3,6,1, 5,0,1, 5,6,0, 5,14,0, 5,18,1, 6,3,0, 6,5,1, 6,9,1, 6,13,1, 7,8,0, 7,12,0, 8,7,1, 8,11,1, 9,0,1, 9,6,0, 9,14,0, 11,8,0, 11,12,0, 11,18,1, 12,7,1, 12,11,1, 12,17,0, 13,6,0, 13,14,0, 14,5,1, 14,9,1, 14,13,1, 15,0,1, 15,18,1, 17,12,1, 18,5,0, 18,11,0, 18,15,0, 
02215     // End marker
02216     0
02217   };
02218 
02219 
02220   /*
02221    * Name: 21.08, 21 x 21
02222    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02223    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02224    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02225    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02226    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
02227    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02228    *    (_ _ _ _ _ * * _ _ _ _ * _ _ _ _ _ * _ _ _)
02229    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02230    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02231    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
02232    *    (* * * _ _ _ _ * * _ _ _ * * _ _ _ _ * * *)
02233    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ _)
02234    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
02235    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02236    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ * * _ _ _ _ _)
02237    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02238    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
02239    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02240    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02241    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02242    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02243    */
02244   const int g37[] = {
02245     // Width and height of crossword grid
02246     21, 21,
02247     // Number of black fields
02248     76,
02249     // Black field coordinates
02250     0,4, 0,10, 0,16, 1,4, 1,10, 1,16, 2,4, 2,10, 2,16, 3,8, 3,14, 4,0, 4,1, 4,2, 4,7, 4,13, 4,18, 4,19, 4,20, 5,6, 5,12, 6,5, 6,6, 6,11, 6,17, 7,4, 7,10, 7,16, 8,3, 8,10, 8,15, 9,8, 9,9, 9,14, 10,0, 10,1, 10,2, 10,7, 10,13, 10,18, 10,19, 10,20, 11,6, 11,11, 11,12, 12,5, 12,10, 12,17, 13,4, 13,10, 13,16, 14,3, 14,9, 14,14, 14,15, 15,8, 15,14, 16,0, 16,1, 16,2, 16,7, 16,13, 16,18, 16,19, 16,20, 17,6, 17,12, 18,4, 18,10, 18,16, 19,4, 19,10, 19,16, 20,4, 20,10, 20,16, 
02251     // Length and number of words of that length
02252     9, 2,
02253     // Coordinates where words start and direction (0 = horizontal)
02254     0,9,0, 12,11,0, 
02255     // Length and number of words of that length
02256     8, 10,
02257     // Coordinates where words start and direction (0 = horizontal)
02258     0,3,0, 0,15,0, 3,0,1, 5,13,1, 9,0,1, 11,13,1, 13,5,0, 13,17,0, 15,0,1, 17,13,1, 
02259     // Length and number of words of that length
02260     6, 14,
02261     // Coordinates where words start and direction (0 = horizontal)
02262     0,5,0, 0,11,0, 0,17,0, 3,15,1, 5,0,1, 8,4,1, 9,15,1, 11,0,1, 12,11,1, 15,3,0, 15,9,0, 15,15,0, 15,15,1, 17,0,1, 
02263     // Length and number of words of that length
02264     5, 61,
02265     // Coordinates where words start and direction (0 = horizontal)
02266     0,5,1, 0,6,0, 0,11,1, 0,12,0, 1,5,1, 1,11,1, 2,5,1, 2,11,1, 3,9,1, 4,8,0, 4,8,1, 4,14,0, 5,0,0, 5,1,0, 5,2,0, 5,7,0, 5,7,1, 5,13,0, 5,18,0, 5,19,0, 5,20,0, 6,0,1, 6,12,0, 6,12,1, 7,5,0, 7,5,1, 7,11,1, 7,17,0, 8,4,0, 8,16,0, 8,16,1, 9,3,0, 9,15,0, 10,8,0, 10,8,1, 11,0,0, 11,1,0, 11,2,0, 11,7,0, 11,13,0, 11,18,0, 11,19,0, 11,20,0, 12,0,1, 12,6,0, 12,12,0, 13,5,1, 13,11,1, 14,4,1, 14,16,1, 15,9,1, 16,8,0, 16,8,1, 16,14,0, 17,7,1, 18,5,1, 18,11,1, 19,5,1, 19,11,1, 20,5,1, 20,11,1, 
02267     // Length and number of words of that length
02268     4, 54,
02269     // Coordinates where words start and direction (0 = horizontal)
02270     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,7,0, 0,13,0, 0,17,1, 0,18,0, 0,19,0, 0,20,0, 1,0,1, 1,17,1, 2,0,1, 2,17,1, 3,4,0, 3,10,0, 3,16,0, 4,3,1, 4,14,1, 6,7,1, 7,0,1, 7,6,0, 7,11,0, 7,17,1, 8,11,1, 9,10,1, 10,3,1, 10,9,0, 10,14,0, 10,14,1, 11,7,1, 12,6,1, 13,0,1, 13,17,1, 14,4,0, 14,10,0, 14,10,1, 14,16,0, 16,3,1, 16,14,1, 17,0,0, 17,1,0, 17,2,0, 17,7,0, 17,13,0, 17,18,0, 17,19,0, 17,20,0, 18,0,1, 18,17,1, 19,0,1, 19,17,1, 20,0,1, 20,17,1, 
02271     // Length and number of words of that length
02272     3, 9,
02273     // Coordinates where words start and direction (0 = horizontal)
02274     0,8,0, 0,14,0, 6,18,1, 8,0,1, 9,10,0, 12,18,1, 14,0,1, 18,6,0, 18,12,0, 
02275     // End marker
02276     0
02277   };
02278 
02279 
02280   /*
02281    * Name: 21.09, 21 x 21
02282    *    (* * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * *)
02283    *    (* _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ *)
02284    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02285    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
02286    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02287    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02288    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02289    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
02290    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02291    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
02292    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02293    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02294    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02295    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
02296    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02297    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
02298    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02299    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
02300    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02301    *    (* _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ *)
02302    *    (* * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * *)
02303    */
02304   const int g38[] = {
02305     // Width and height of crossword grid
02306     21, 21,
02307     // Number of black fields
02308     75,
02309     // Black field coordinates
02310     0,0, 0,1, 0,7, 0,13, 0,19, 0,20, 1,0, 1,7, 1,13, 1,20, 2,7, 2,13, 3,3, 3,11, 3,17, 4,4, 4,10, 4,16, 5,5, 5,9, 5,15, 6,8, 6,14, 7,0, 7,1, 7,2, 7,7, 7,13, 7,18, 7,19, 7,20, 8,6, 8,12, 9,5, 9,11, 9,17, 10,4, 10,10, 10,16, 11,3, 11,9, 11,15, 12,8, 12,14, 13,0, 13,1, 13,2, 13,7, 13,13, 13,18, 13,19, 13,20, 14,6, 14,12, 15,5, 15,11, 15,15, 16,4, 16,10, 16,16, 17,3, 17,9, 17,17, 18,7, 18,13, 19,0, 19,7, 19,13, 19,20, 20,0, 20,1, 20,7, 20,13, 20,19, 20,20, 
02311     // Length and number of words of that length
02312     8, 8,
02313     // Coordinates where words start and direction (0 = horizontal)
02314     0,6,0, 0,12,0, 6,0,1, 8,13,1, 12,0,1, 13,8,0, 13,14,0, 14,13,1, 
02315     // Length and number of words of that length
02316     7, 12,
02317     // Coordinates where words start and direction (0 = horizontal)
02318     0,2,0, 0,18,0, 2,0,1, 2,14,1, 3,4,1, 4,3,0, 10,17,0, 14,2,0, 14,18,0, 17,10,1, 18,0,1, 18,14,1, 
02319     // Length and number of words of that length
02320     6, 16,
02321     // Coordinates where words start and direction (0 = horizontal)
02322     0,8,0, 0,14,0, 1,1,0, 1,1,1, 1,14,1, 1,19,0, 6,15,1, 8,0,1, 12,15,1, 14,0,1, 14,1,0, 14,19,0, 15,6,0, 15,12,0, 19,1,1, 19,14,1, 
02323     // Length and number of words of that length
02324     5, 72,
02325     // Coordinates where words start and direction (0 = horizontal)
02326     0,2,1, 0,5,0, 0,8,1, 0,9,0, 0,14,1, 0,15,0, 1,8,1, 2,0,0, 2,8,1, 2,20,0, 3,12,1, 4,5,1, 4,11,0, 4,11,1, 4,17,0, 5,0,1, 5,4,0, 5,10,0, 5,10,1, 5,16,0, 5,16,1, 6,9,0, 6,9,1, 6,15,0, 7,8,0, 7,8,1, 7,14,0, 8,0,0, 8,1,0, 8,2,0, 8,7,0, 8,7,1, 8,13,0, 8,18,0, 8,19,0, 8,20,0, 9,0,1, 9,6,0, 9,6,1, 9,12,0, 9,12,1, 10,5,0, 10,5,1, 10,11,0, 10,11,1, 11,4,0, 11,4,1, 11,10,0, 11,10,1, 11,16,0, 11,16,1, 12,3,0, 12,9,0, 12,9,1, 13,8,1, 14,0,0, 14,7,1, 14,20,0, 15,0,1, 15,6,1, 15,16,1, 16,5,0, 16,5,1, 16,11,0, 16,11,1, 16,15,0, 17,4,1, 18,8,1, 19,8,1, 20,2,1, 20,8,1, 20,14,1, 
02327     // Length and number of words of that length
02328     4, 20,
02329     // Coordinates where words start and direction (0 = horizontal)
02330     0,4,0, 0,10,0, 0,16,0, 3,7,0, 3,13,0, 4,0,1, 4,17,1, 7,3,1, 7,14,1, 10,0,1, 10,17,1, 13,3,1, 13,14,1, 14,7,0, 14,13,0, 16,0,1, 16,17,1, 17,4,0, 17,10,0, 17,16,0, 
02331     // Length and number of words of that length
02332     3, 16,
02333     // Coordinates where words start and direction (0 = horizontal)
02334     0,3,0, 0,11,0, 0,17,0, 3,0,1, 3,18,1, 5,6,1, 6,5,0, 9,18,1, 11,0,1, 12,15,0, 15,12,1, 17,0,1, 17,18,1, 18,3,0, 18,9,0, 18,17,0, 
02335     // End marker
02336     0
02337   };
02338 
02339 
02340   /*
02341    * Name: 21.10, 21 x 21
02342    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02343    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02344    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02345    *    (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
02346    *    (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ * _ _ _ _)
02347    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
02348    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ _)
02349    *    (* * * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ * * *)
02350    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
02351    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
02352    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02353    *    (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02354    *    (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _)
02355    *    (* * * _ _ _ _ _ _ _ _ * _ _ _ _ _ _ * * *)
02356    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ _)
02357    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02358    *    (_ _ _ _ * _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
02359    *    (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
02360    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02361    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02362    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02363    */
02364   const int g39[] = {
02365     // Width and height of crossword grid
02366     21, 21,
02367     // Number of black fields
02368     58,
02369     // Black field coordinates
02370     0,7, 0,13, 1,7, 1,13, 2,7, 2,13, 3,3, 3,17, 4,4, 4,12, 4,16, 5,5, 5,11, 5,15, 6,6, 6,10, 6,14, 7,0, 7,1, 7,2, 7,9, 7,18, 7,19, 7,20, 8,8, 8,16, 9,7, 9,15, 10,6, 10,14, 11,5, 11,13, 12,4, 12,12, 13,0, 13,1, 13,2, 13,11, 13,18, 13,19, 13,20, 14,6, 14,10, 14,14, 15,5, 15,9, 15,15, 16,4, 16,8, 16,16, 17,3, 17,17, 18,7, 18,13, 19,7, 19,13, 20,7, 20,13, 
02371     // Length and number of words of that length
02372     13, 4,
02373     // Coordinates where words start and direction (0 = horizontal)
02374     3,4,1, 4,3,0, 4,17,0, 17,4,1, 
02375     // Length and number of words of that length
02376     8, 8,
02377     // Coordinates where words start and direction (0 = horizontal)
02378     0,8,0, 3,13,0, 7,10,1, 8,0,1, 10,7,0, 12,13,1, 13,3,1, 13,12,0, 
02379     // Length and number of words of that length
02380     7, 42,
02381     // Coordinates where words start and direction (0 = horizontal)
02382     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,9,0, 0,14,1, 0,18,0, 0,19,0, 0,20,0, 1,0,1, 1,14,1, 2,0,1, 2,14,1, 4,5,1, 5,4,0, 5,12,0, 6,11,0, 7,10,0, 8,9,0, 8,9,1, 9,0,1, 9,8,0, 9,8,1, 9,16,0, 10,7,1, 11,6,1, 11,14,1, 12,5,1, 14,0,0, 14,1,0, 14,2,0, 14,11,0, 14,18,0, 14,19,0, 14,20,0, 16,9,1, 18,0,1, 18,14,1, 19,0,1, 19,14,1, 20,0,1, 20,14,1, 
02383     // Length and number of words of that length
02384     6, 16,
02385     // Coordinates where words start and direction (0 = horizontal)
02386     0,6,0, 0,10,0, 0,14,0, 3,7,0, 6,0,1, 6,15,1, 7,3,1, 10,0,1, 10,15,1, 12,13,0, 13,12,1, 14,0,1, 14,15,1, 15,6,0, 15,10,0, 15,14,0, 
02387     // Length and number of words of that length
02388     5, 28,
02389     // Coordinates where words start and direction (0 = horizontal)
02390     0,5,0, 0,8,1, 0,11,0, 0,15,0, 1,8,1, 2,8,1, 5,0,1, 5,6,1, 5,16,1, 6,5,0, 8,0,0, 8,1,0, 8,2,0, 8,18,0, 8,19,0, 8,20,0, 9,16,1, 10,15,0, 11,0,1, 15,0,1, 15,10,1, 15,16,1, 16,5,0, 16,9,0, 16,15,0, 18,8,1, 19,8,1, 20,8,1, 
02391     // Length and number of words of that length
02392     4, 12,
02393     // Coordinates where words start and direction (0 = horizontal)
02394     0,4,0, 0,12,0, 0,16,0, 4,0,1, 4,17,1, 8,17,1, 12,0,1, 16,0,1, 16,17,1, 17,4,0, 17,8,0, 17,16,0, 
02395     // Length and number of words of that length
02396     3, 24,
02397     // Coordinates where words start and direction (0 = horizontal)
02398     0,3,0, 0,17,0, 3,0,1, 3,18,1, 4,13,1, 5,12,1, 5,16,0, 6,7,1, 6,11,1, 6,15,0, 7,6,0, 7,14,0, 11,6,0, 11,14,0, 12,5,0, 13,4,0, 14,7,1, 14,11,1, 15,6,1, 16,5,1, 17,0,1, 17,18,1, 18,3,0, 18,17,0, 
02399     // End marker
02400     0
02401   };
02402 
02403 
02404   /*
02405    * Name: 23.01, 23 x 23
02406    *    (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
02407    *    (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
02408    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
02409    *    (_ _ _ _ * _ _ _ * * _ _ _ _ * _ _ _ _ _ _ _ _)
02410    *    (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _)
02411    *    (* * * * _ _ _ * _ _ _ * _ _ _ * _ _ _ _ * * *)
02412    *    (_ _ _ _ _ _ * _ _ _ * * * _ _ _ _ _ * _ _ _ _)
02413    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02414    *    (_ _ _ _ * _ _ _ * * _ _ _ _ _ _ * _ _ _ _ _ _)
02415    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02416    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ * _ _ _ _)
02417    *    (* * * _ _ _ _ _ _ _ * * * _ _ _ _ _ _ _ * * *)
02418    *    (_ _ _ _ * _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02419    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02420    *    (_ _ _ _ _ _ * _ _ _ _ _ _ * * _ _ _ * _ _ _ _)
02421    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02422    *    (_ _ _ _ * _ _ _ _ _ * * * _ _ _ * _ _ _ _ _ _)
02423    *    (* * * _ _ _ _ * _ _ _ * _ _ _ * _ _ _ * * * *)
02424    *    (_ _ _ _ _ _ * * _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
02425    *    (_ _ _ _ _ _ _ _ * _ _ _ _ * * _ _ _ * _ _ _ _)
02426    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
02427    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
02428    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
02429    */
02430   const int g40[] = {
02431     // Width and height of crossword grid
02432     23, 23,
02433     // Number of black fields
02434     89,
02435     // Black field coordinates
02436     0,5, 0,11, 0,17, 1,5, 1,11, 1,17, 2,5, 2,11, 2,17, 3,4, 3,5, 4,3, 4,8, 4,12, 4,16, 4,21, 4,22, 5,7, 5,15, 6,0, 6,1, 6,6, 6,10, 6,14, 6,18, 7,5, 7,9, 7,13, 7,17, 7,18, 8,3, 8,8, 8,12, 8,19, 9,3, 9,8, 9,21, 9,22, 10,6, 10,11, 10,16, 11,5, 11,6, 11,7, 11,11, 11,15, 11,16, 11,17, 12,6, 12,11, 12,16, 13,0, 13,1, 13,14, 13,19, 14,3, 14,10, 14,14, 14,19, 15,4, 15,5, 15,9, 15,13, 15,17, 16,4, 16,8, 16,12, 16,16, 16,21, 16,22, 17,7, 17,15, 18,0, 18,1, 18,6, 18,10, 18,14, 18,19, 19,17, 19,18, 20,5, 20,11, 20,17, 21,5, 21,11, 21,17, 22,5, 22,11, 22,17, 
02437     // Length and number of words of that length
02438     23, 2,
02439     // Coordinates where words start and direction (0 = horizontal)
02440     0,2,0, 0,20,0, 
02441     // Length and number of words of that length
02442     17, 2,
02443     // Coordinates where words start and direction (0 = horizontal)
02444     3,6,1, 19,0,1, 
02445     // Length and number of words of that length
02446     12, 2,
02447     // Coordinates where words start and direction (0 = horizontal)
02448     9,9,1, 13,2,1, 
02449     // Length and number of words of that length
02450     11, 2,
02451     // Coordinates where words start and direction (0 = horizontal)
02452     4,4,0, 8,18,0, 
02453     // Length and number of words of that length
02454     8, 2,
02455     // Coordinates where words start and direction (0 = horizontal)
02456     0,19,0, 15,3,0, 
02457     // Length and number of words of that length
02458     7, 16,
02459     // Coordinates where words start and direction (0 = horizontal)
02460     0,9,0, 0,13,0, 3,11,0, 5,0,1, 5,8,1, 5,16,1, 7,10,0, 8,9,0, 8,13,0, 9,12,0, 13,11,0, 16,9,0, 16,13,0, 17,0,1, 17,8,1, 17,16,1, 
02461     // Length and number of words of that length
02462     6, 24,
02463     // Coordinates where words start and direction (0 = horizontal)
02464     0,0,0, 0,1,0, 0,6,0, 0,10,0, 0,14,0, 0,18,0, 7,0,0, 7,1,0, 7,14,0, 8,13,1, 10,0,1, 10,8,0, 10,17,1, 10,21,0, 10,22,0, 12,0,1, 12,17,1, 14,4,1, 17,4,0, 17,8,0, 17,12,0, 17,16,0, 17,21,0, 17,22,0, 
02465     // Length and number of words of that length
02466     5, 38,
02467     // Coordinates where words start and direction (0 = horizontal)
02468     0,0,1, 0,6,1, 0,7,0, 0,12,1, 0,15,0, 0,18,1, 1,0,1, 1,6,1, 1,12,1, 1,18,1, 2,0,1, 2,6,1, 2,12,1, 2,18,1, 5,16,0, 6,7,0, 6,15,0, 7,0,1, 11,0,1, 11,18,1, 12,7,0, 12,15,0, 13,6,0, 15,18,1, 18,7,0, 18,15,0, 20,0,1, 20,6,1, 20,12,1, 20,18,1, 21,0,1, 21,6,1, 21,12,1, 21,18,1, 22,0,1, 22,6,1, 22,12,1, 22,18,1, 
02469     // Length and number of words of that length
02470     4, 40,
02471     // Coordinates where words start and direction (0 = horizontal)
02472     0,3,0, 0,8,0, 0,12,0, 0,16,0, 0,21,0, 0,22,0, 3,0,1, 3,17,0, 4,4,1, 4,17,1, 5,21,0, 5,22,0, 6,2,1, 6,19,1, 7,19,1, 8,4,1, 9,4,1, 9,19,0, 10,3,0, 10,7,1, 10,12,1, 12,7,1, 12,12,1, 13,15,1, 14,0,0, 14,1,0, 14,15,1, 15,0,1, 16,0,1, 16,5,0, 16,17,1, 18,2,1, 18,15,1, 19,0,0, 19,1,0, 19,6,0, 19,10,0, 19,14,0, 19,19,0, 19,19,1, 
02473     // Length and number of words of that length
02474     3, 44,
02475     // Coordinates where words start and direction (0 = horizontal)
02476     0,4,0, 4,0,1, 4,5,0, 4,9,1, 4,13,1, 5,3,0, 5,8,0, 5,12,0, 6,7,1, 6,11,1, 6,15,1, 7,6,0, 7,6,1, 7,10,1, 7,14,1, 8,0,1, 8,5,0, 8,9,1, 8,17,0, 8,20,1, 9,0,1, 11,8,1, 11,12,1, 12,5,0, 12,17,0, 13,16,0, 13,20,1, 14,0,1, 14,11,1, 14,20,1, 15,6,1, 15,10,0, 15,10,1, 15,14,0, 15,14,1, 15,19,0, 16,5,1, 16,9,1, 16,13,1, 16,17,0, 18,7,1, 18,11,1, 18,20,1, 20,18,0, 
02477     // End marker
02478     0
02479   };
02480 
02481 
02482   /*
02483    * Name: 23.02, 23 x 23
02484    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ *)
02485    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02486    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _)
02487    *    (_ _ _ * * _ _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _)
02488    *    (_ _ _ _ _ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _ _)
02489    *    (* * * _ _ _ * _ _ _ _ * * _ _ _ * * _ _ _ _ _)
02490    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ * * *)
02491    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
02492    *    (_ _ _ _ * _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
02493    *    (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
02494    *    (* * _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02495    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02496    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ * *)
02497    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
02498    *    (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ * _ _ _ _)
02499    *    (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02500    *    (* * * _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02501    *    (_ _ _ _ _ * * _ _ _ * * _ _ _ _ * _ _ _ * * *)
02502    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _ _ _ _ _)
02503    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ _ * * _ _ _)
02504    *    (_ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
02505    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02506    *    (* _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02507    */
02508   const int g41[] = {
02509     // Width and height of crossword grid
02510     23, 23,
02511     // Number of black fields
02512     94,
02513     // Black field coordinates
02514     0,5, 0,10, 0,16, 0,22, 1,5, 1,10, 1,16, 2,5, 2,16, 3,3, 3,9, 3,14, 3,19, 4,3, 4,7, 4,8, 4,13, 4,18, 5,0, 5,1, 5,6, 5,12, 5,17, 6,5, 6,17, 6,21, 6,22, 7,4, 7,10, 7,11, 7,15, 7,16, 8,4, 8,9, 8,19, 9,8, 9,13, 9,14, 9,18, 10,0, 10,1, 10,2, 10,6, 10,7, 10,12, 10,17, 11,5, 11,17, 12,5, 12,10, 12,15, 12,16, 12,20, 12,21, 12,22, 13,4, 13,8, 13,9, 13,14, 14,3, 14,13, 14,18, 15,6, 15,7, 15,11, 15,12, 15,18, 16,0, 16,1, 16,5, 16,17, 17,5, 17,10, 17,16, 17,21, 17,22, 18,4, 18,9, 18,14, 18,15, 18,19, 19,3, 19,8, 19,13, 19,19, 20,6, 20,17, 21,6, 21,12, 21,17, 22,0, 22,6, 22,12, 22,17, 
02515     // Length and number of words of that length
02516     12, 2,
02517     // Coordinates where words start and direction (0 = horizontal)
02518     0,20,0, 11,2,0, 
02519     // Length and number of words of that length
02520     11, 3,
02521     // Coordinates where words start and direction (0 = horizontal)
02522     6,6,1, 11,6,1, 16,6,1, 
02523     // Length and number of words of that length
02524     10, 4,
02525     // Coordinates where words start and direction (0 = horizontal)
02526     0,2,0, 2,6,1, 13,20,0, 20,7,1, 
02527     // Length and number of words of that length
02528     9, 4,
02529     // Coordinates where words start and direction (0 = horizontal)
02530     5,3,0, 8,10,1, 9,19,0, 14,4,1, 
02531     // Length and number of words of that length
02532     8, 2,
02533     // Coordinates where words start and direction (0 = horizontal)
02534     9,0,1, 13,15,1, 
02535     // Length and number of words of that length
02536     7, 7,
02537     // Coordinates where words start and direction (0 = horizontal)
02538     0,4,0, 0,11,0, 0,15,0, 8,11,0, 16,7,0, 16,11,0, 16,18,0, 
02539     // Length and number of words of that length
02540     6, 8,
02541     // Coordinates where words start and direction (0 = horizontal)
02542     0,21,0, 1,17,1, 2,17,1, 7,17,1, 15,0,1, 17,1,0, 20,0,1, 21,0,1, 
02543     // Length and number of words of that length
02544     5, 48,
02545     // Coordinates where words start and direction (0 = horizontal)
02546     0,0,0, 0,0,1, 0,1,0, 0,6,0, 0,11,1, 0,12,0, 0,17,0, 0,17,1, 1,0,1, 1,11,1, 1,22,0, 2,0,1, 2,10,0, 3,4,1, 4,14,0, 5,7,0, 5,7,1, 5,18,1, 6,0,1, 7,5,1, 7,21,0, 7,22,0, 10,18,1, 11,0,0, 11,0,1, 11,1,0, 11,18,1, 12,0,1, 13,15,0, 14,8,0, 15,13,1, 16,12,0, 16,18,1, 17,0,0, 17,0,1, 17,11,1, 18,5,0, 18,10,0, 18,16,0, 18,21,0, 18,22,0, 19,14,1, 20,18,1, 21,7,1, 21,18,1, 22,1,1, 22,7,1, 22,18,1, 
02547     // Length and number of words of that length
02548     4, 72,
02549     // Coordinates where words start and direction (0 = horizontal)
02550     0,6,1, 0,7,0, 0,8,0, 0,13,0, 0,18,0, 1,6,1, 3,10,1, 3,15,1, 3,16,0, 4,9,0, 4,9,1, 4,14,1, 4,19,0, 4,19,1, 5,2,1, 5,8,0, 5,13,0, 5,13,1, 5,18,0, 6,0,0, 6,1,0, 6,6,0, 6,12,0, 7,0,1, 7,5,0, 8,0,1, 8,5,1, 8,10,0, 8,15,0, 8,16,0, 9,4,0, 9,9,0, 9,9,1, 9,19,1, 10,8,1, 10,13,0, 10,13,1, 10,18,0, 11,6,0, 11,7,0, 11,12,0, 12,6,1, 12,11,1, 12,17,0, 13,0,1, 13,10,0, 13,10,1, 13,16,0, 13,21,0, 13,22,0, 14,4,0, 14,9,0, 14,14,0, 14,14,1, 14,19,1, 15,3,0, 15,13,0, 15,19,1, 16,6,0, 17,6,1, 17,17,1, 18,0,1, 18,5,1, 18,10,1, 19,4,0, 19,4,1, 19,9,0, 19,9,1, 19,14,0, 19,15,0, 21,13,1, 22,13,1, 
02551     // Length and number of words of that length
02552     3, 32,
02553     // Coordinates where words start and direction (0 = horizontal)
02554     0,3,0, 0,9,0, 0,14,0, 0,19,0, 3,0,1, 3,5,0, 3,20,1, 4,0,1, 4,4,1, 6,18,1, 7,12,1, 7,17,0, 8,20,1, 9,15,1, 10,3,1, 10,8,0, 10,14,0, 12,17,1, 13,5,0, 13,5,1, 14,0,1, 15,8,1, 16,2,1, 17,17,0, 18,16,1, 18,20,1, 19,0,1, 19,20,1, 20,3,0, 20,8,0, 20,13,0, 20,19,0, 
02555     // End marker
02556     0
02557   };
02558 
02559 
02560   /*
02561    * Name: 23.03, 23 x 23
02562    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02563    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02564    *    (_ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
02565    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
02566    *    (_ _ _ * * _ _ _ * * * _ _ _ _ _ _ _ * _ _ _ _)
02567    *    (* * * _ _ _ _ _ _ _ * _ _ _ _ _ * * _ _ _ _ _)
02568    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ * _ _ _ _ * * *)
02569    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
02570    *    (_ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
02571    *    (_ _ _ _ _ _ _ * * _ _ _ _ _ _ _ _ _ * _ _ _ _)
02572    *    (_ _ _ * _ _ _ _ _ * * _ _ _ _ _ * _ _ _ _ _ _)
02573    *    (* * _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ * *)
02574    *    (_ _ _ _ _ _ * _ _ _ _ _ * * _ _ _ _ _ * _ _ _)
02575    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _ _)
02576    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _)
02577    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02578    *    (* * * _ _ _ _ * _ _ _ * _ _ _ _ * _ _ _ _ _ _)
02579    *    (_ _ _ _ _ * * _ _ _ _ _ * _ _ _ _ _ _ _ * * *)
02580    *    (_ _ _ _ * _ _ _ _ _ _ _ * * * _ _ _ * * _ _ _)
02581    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02582    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _)
02583    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02584    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02585    */
02586   const int g42[] = {
02587     // Width and height of crossword grid
02588     23, 23,
02589     // Number of black fields
02590     89,
02591     // Black field coordinates
02592     0,5, 0,11, 0,16, 1,5, 1,11, 1,16, 2,5, 2,16, 3,4, 3,10, 3,15, 4,4, 4,8, 4,13, 4,14, 4,18, 4,19, 5,11, 5,17, 5,21, 5,22, 6,0, 6,1, 6,6, 6,7, 6,12, 6,17, 7,3, 7,9, 7,16, 8,4, 8,9, 9,4, 9,10, 9,14, 9,19, 10,4, 10,5, 10,10, 10,15, 10,20, 10,21, 10,22, 11,6, 11,11, 11,16, 12,0, 12,1, 12,2, 12,7, 12,12, 12,17, 12,18, 13,3, 13,8, 13,12, 13,18, 14,13, 14,18, 15,6, 15,13, 15,19, 16,5, 16,10, 16,15, 16,16, 16,21, 16,22, 17,0, 17,1, 17,5, 17,11, 18,3, 18,4, 18,8, 18,9, 18,14, 18,18, 19,7, 19,12, 19,18, 20,6, 20,17, 21,6, 21,11, 21,17, 22,6, 22,11, 22,17, 
02593     // Length and number of words of that length
02594     13, 2,
02595     // Coordinates where words start and direction (0 = horizontal)
02596     8,10,1, 14,0,1, 
02597     // Length and number of words of that length
02598     12, 2,
02599     // Coordinates where words start and direction (0 = horizontal)
02600     0,2,0, 11,20,0, 
02601     // Length and number of words of that length
02602     11, 2,
02603     // Coordinates where words start and direction (0 = horizontal)
02604     5,0,1, 17,12,1, 
02605     // Length and number of words of that length
02606     10, 4,
02607     // Coordinates where words start and direction (0 = horizontal)
02608     0,20,0, 2,6,1, 13,2,0, 20,7,1, 
02609     // Length and number of words of that length
02610     9, 2,
02611     // Coordinates where words start and direction (0 = horizontal)
02612     5,13,0, 9,9,0, 
02613     // Length and number of words of that length
02614     8, 2,
02615     // Coordinates where words start and direction (0 = horizontal)
02616     5,8,0, 10,14,0, 
02617     // Length and number of words of that length
02618     7, 10,
02619     // Coordinates where words start and direction (0 = horizontal)
02620     0,3,0, 0,9,0, 3,5,0, 3,16,1, 5,18,0, 11,4,0, 13,17,0, 16,13,0, 16,19,0, 19,0,1, 
02621     // Length and number of words of that length
02622     6, 24,
02623     // Coordinates where words start and direction (0 = horizontal)
02624     0,0,0, 0,1,0, 0,6,0, 0,7,0, 0,12,0, 0,17,1, 1,17,1, 2,17,1, 4,15,0, 7,10,1, 7,17,1, 11,0,1, 11,17,1, 13,7,0, 15,0,1, 15,7,1, 17,10,0, 17,15,0, 17,16,0, 17,21,0, 17,22,0, 20,0,1, 21,0,1, 22,0,1, 
02625     // Length and number of words of that length
02626     5, 42,
02627     // Coordinates where words start and direction (0 = horizontal)
02628     0,0,1, 0,6,1, 0,17,0, 0,21,0, 0,22,0, 1,0,1, 1,6,1, 2,0,1, 3,5,1, 4,10,0, 5,12,1, 6,11,0, 6,18,1, 7,0,0, 7,1,0, 7,4,1, 7,7,0, 7,12,0, 7,17,0, 8,3,0, 9,5,1, 10,19,0, 11,5,0, 11,10,0, 11,15,0, 11,21,0, 11,22,0, 12,11,0, 13,13,1, 14,12,0, 15,14,1, 16,0,1, 17,6,1, 18,0,0, 18,1,0, 18,5,0, 19,13,1, 20,18,1, 21,12,1, 21,18,1, 22,12,1, 22,18,1, 
02629     // Length and number of words of that length
02630     4, 58,
02631     // Coordinates where words start and direction (0 = horizontal)
02632     0,8,0, 0,12,1, 0,13,0, 0,14,0, 0,18,0, 0,19,0, 1,12,1, 3,0,1, 3,11,1, 3,16,0, 4,0,1, 4,9,1, 5,14,0, 5,19,0, 6,2,1, 6,8,1, 6,13,1, 6,21,0, 6,22,0, 7,6,0, 8,0,1, 8,5,1, 9,0,1, 9,15,1, 10,0,1, 10,6,1, 10,11,1, 10,16,1, 11,7,1, 11,12,1, 12,3,1, 12,8,1, 12,13,1, 12,16,0, 12,19,1, 13,0,0, 13,1,0, 13,4,1, 13,19,1, 14,3,0, 14,8,0, 14,14,1, 14,19,1, 16,6,0, 16,6,1, 16,11,1, 16,17,1, 18,10,1, 18,19,1, 19,3,0, 19,4,0, 19,8,0, 19,8,1, 19,9,0, 19,14,0, 19,19,1, 21,7,1, 22,7,1, 
02633     // Length and number of words of that length
02634     3, 26,
02635     // Coordinates where words start and direction (0 = horizontal)
02636     0,4,0, 0,10,0, 0,15,0, 2,11,0, 4,5,1, 4,15,1, 4,20,1, 5,4,0, 5,18,1, 7,0,1, 8,16,0, 9,11,1, 9,20,1, 12,6,0, 13,0,1, 13,9,1, 15,18,0, 15,20,1, 17,2,1, 18,0,1, 18,5,1, 18,11,0, 18,15,1, 20,7,0, 20,12,0, 20,18,0, 
02637     // End marker
02638     0
02639   };
02640 
02641 
02642   /*
02643    * Name: 23.04, 23 x 23
02644    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02645    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02646    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02647    *    (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
02648    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02649    *    (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
02650    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _ _)
02651    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02652    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
02653    *    (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
02654    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _)
02655    *    (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
02656    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
02657    *    (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
02658    *    (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02659    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02660    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02661    *    (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
02662    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02663    *    (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
02664    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02665    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02666    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02667    */
02668   const int g43[] = {
02669     // Width and height of crossword grid
02670     23, 23,
02671     // Number of black fields
02672     80,
02673     // Black field coordinates
02674     0,5, 0,11, 0,17, 1,5, 1,11, 1,17, 2,5, 2,11, 2,17, 3,9, 3,13, 4,8, 4,14, 5,0, 5,1, 5,2, 5,7, 5,15, 5,20, 5,21, 5,22, 6,6, 6,10, 6,16, 7,5, 7,11, 7,17, 8,4, 8,12, 8,18, 9,3, 9,9, 9,13, 9,19, 10,8, 10,16, 11,0, 11,1, 11,2, 11,7, 11,15, 11,20, 11,21, 11,22, 12,6, 12,14, 13,3, 13,9, 13,13, 13,19, 14,4, 14,10, 14,18, 15,5, 15,11, 15,17, 16,6, 16,12, 16,16, 17,0, 17,1, 17,2, 17,7, 17,15, 17,20, 17,21, 17,22, 18,8, 18,14, 19,9, 19,13, 20,5, 20,11, 20,17, 21,5, 21,11, 21,17, 22,5, 22,11, 22,17, 
02675     // Length and number of words of that length
02676     9, 8,
02677     // Coordinates where words start and direction (0 = horizontal)
02678     0,3,0, 0,19,0, 3,0,1, 3,14,1, 14,3,0, 14,19,0, 19,0,1, 19,14,1, 
02679     // Length and number of words of that length
02680     8, 12,
02681     // Coordinates where words start and direction (0 = horizontal)
02682     0,4,0, 0,12,0, 0,18,0, 4,0,1, 4,15,1, 10,0,1, 12,15,1, 15,4,0, 15,10,0, 15,18,0, 18,0,1, 18,15,1, 
02683     // Length and number of words of that length
02684     7, 14,
02685     // Coordinates where words start and direction (0 = horizontal)
02686     5,8,1, 5,14,0, 7,10,0, 8,5,0, 8,5,1, 8,11,0, 8,17,0, 9,12,0, 10,9,1, 11,8,0, 11,8,1, 12,7,1, 14,11,1, 17,8,1, 
02687     // Length and number of words of that length
02688     6, 12,
02689     // Coordinates where words start and direction (0 = horizontal)
02690     0,6,0, 0,10,0, 0,16,0, 6,0,1, 6,17,1, 10,17,1, 12,0,1, 16,0,1, 16,17,1, 17,6,0, 17,12,0, 17,16,0, 
02691     // Length and number of words of that length
02692     5, 84,
02693     // Coordinates where words start and direction (0 = horizontal)
02694     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,6,1, 0,7,0, 0,12,1, 0,15,0, 0,18,1, 0,20,0, 0,21,0, 0,22,0, 1,0,1, 1,6,1, 1,12,1, 1,18,1, 2,0,1, 2,6,1, 2,12,1, 2,18,1, 4,9,0, 4,9,1, 4,13,0, 5,8,0, 6,0,0, 6,1,0, 6,2,0, 6,7,0, 6,11,1, 6,15,0, 6,20,0, 6,21,0, 6,22,0, 7,0,1, 7,6,0, 7,6,1, 7,12,1, 7,18,1, 8,13,1, 9,4,0, 9,4,1, 9,14,1, 9,18,0, 11,16,0, 12,0,0, 12,1,0, 12,2,0, 12,7,0, 12,15,0, 12,20,0, 12,21,0, 12,22,0, 13,4,1, 13,14,0, 13,14,1, 14,5,1, 14,9,0, 14,13,0, 15,0,1, 15,6,1, 15,12,1, 15,18,1, 16,7,1, 18,0,0, 18,1,0, 18,2,0, 18,7,0, 18,9,1, 18,15,0, 18,20,0, 18,21,0, 18,22,0, 20,0,1, 20,6,1, 20,12,1, 20,18,1, 21,0,1, 21,6,1, 21,12,1, 21,18,1, 22,0,1, 22,6,1, 22,12,1, 22,18,1, 
02695     // Length and number of words of that length
02696     4, 20,
02697     // Coordinates where words start and direction (0 = horizontal)
02698     0,8,0, 0,14,0, 3,5,0, 3,11,0, 3,17,0, 5,3,1, 5,16,1, 8,0,1, 8,19,1, 11,3,1, 11,16,1, 14,0,1, 14,19,1, 16,5,0, 16,11,0, 16,17,0, 17,3,1, 17,16,1, 19,8,0, 19,14,0, 
02699     // Length and number of words of that length
02700     3, 20,
02701     // Coordinates where words start and direction (0 = horizontal)
02702     0,9,0, 0,13,0, 3,10,1, 6,7,1, 7,16,0, 9,0,1, 9,10,1, 9,20,1, 10,3,0, 10,9,0, 10,13,0, 10,19,0, 13,0,1, 13,6,0, 13,10,1, 13,20,1, 16,13,1, 19,10,1, 20,9,0, 20,13,0, 
02703     // End marker
02704     0
02705   };
02706 
02707 
02708   /*
02709    * Name: 23.05, 23 x 23
02710    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02711    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02712    *    (_ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02713    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
02714    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02715    *    (* * * _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ * * *)
02716    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02717    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
02718    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
02719    *    (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ _)
02720    *    (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02721    *    (* * * _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ * * *)
02722    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
02723    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
02724    *    (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
02725    *    (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02726    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02727    *    (* * * _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ * * *)
02728    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02729    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
02730    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _)
02731    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02732    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02733    */
02734   const int g44[] = {
02735     // Width and height of crossword grid
02736     23, 23,
02737     // Number of black fields
02738     84,
02739     // Black field coordinates
02740     0,5, 0,11, 0,17, 1,5, 1,11, 1,17, 2,5, 2,11, 2,17, 3,3, 3,8, 3,14, 3,19, 4,7, 4,15, 5,0, 5,1, 5,6, 5,12, 5,16, 5,20, 5,21, 5,22, 6,5, 6,11, 6,17, 7,4, 7,10, 7,18, 8,3, 8,9, 8,14, 8,19, 9,8, 9,13, 10,7, 10,12, 10,17, 11,0, 11,1, 11,2, 11,6, 11,16, 11,20, 11,21, 11,22, 12,5, 12,10, 12,15, 13,9, 13,14, 14,3, 14,8, 14,13, 14,19, 15,4, 15,12, 15,18, 16,5, 16,11, 16,17, 17,0, 17,1, 17,2, 17,6, 17,10, 17,16, 17,21, 17,22, 18,7, 18,15, 19,3, 19,8, 19,14, 19,19, 20,5, 20,11, 20,17, 21,5, 21,11, 21,17, 22,5, 22,11, 22,17, 
02741     // Length and number of words of that length
02742     11, 2,
02743     // Coordinates where words start and direction (0 = horizontal)
02744     0,2,0, 12,20,0, 
02745     // Length and number of words of that length
02746     9, 6,
02747     // Coordinates where words start and direction (0 = horizontal)
02748     0,13,0, 7,11,0, 9,14,1, 11,7,1, 13,0,1, 14,9,0, 
02749     // Length and number of words of that length
02750     8, 4,
02751     // Coordinates where words start and direction (0 = horizontal)
02752     0,9,0, 9,0,1, 13,15,1, 15,13,0, 
02753     // Length and number of words of that length
02754     7, 20,
02755     // Coordinates where words start and direction (0 = horizontal)
02756     0,4,0, 0,10,0, 0,18,0, 4,0,1, 4,8,1, 4,16,1, 5,15,0, 7,11,1, 8,4,0, 8,18,0, 10,0,1, 11,7,0, 12,16,1, 15,5,1, 16,4,0, 16,12,0, 16,18,0, 18,0,1, 18,8,1, 18,16,1, 
02757     // Length and number of words of that length
02758     5, 80,
02759     // Coordinates where words start and direction (0 = horizontal)
02760     0,0,0, 0,0,1, 0,1,0, 0,6,0, 0,6,1, 0,12,0, 0,12,1, 0,16,0, 0,18,1, 0,20,0, 0,21,0, 0,22,0, 1,0,1, 1,6,1, 1,12,1, 1,18,1, 2,0,1, 2,6,1, 2,12,1, 2,18,1, 3,9,1, 4,8,0, 5,7,0, 5,7,1, 6,0,0, 6,0,1, 6,1,0, 6,6,0, 6,6,1, 6,12,1, 6,16,0, 6,18,1, 6,20,0, 6,21,0, 6,22,0, 7,5,0, 7,5,1, 8,4,1, 9,3,0, 9,19,0, 10,18,1, 11,17,0, 12,0,0, 12,0,1, 12,1,0, 12,2,0, 12,6,0, 12,16,0, 12,21,0, 12,22,0, 13,15,0, 14,14,0, 14,14,1, 15,13,1, 16,0,1, 16,6,1, 16,12,1, 16,18,1, 17,11,1, 18,0,0, 18,1,0, 18,2,0, 18,6,0, 18,10,0, 18,16,0, 18,21,0, 18,22,0, 19,9,1, 20,0,1, 20,6,1, 20,12,1, 20,18,1, 21,0,1, 21,6,1, 21,12,1, 21,18,1, 22,0,1, 22,6,1, 22,12,1, 22,18,1, 
02761     // Length and number of words of that length
02762     4, 38,
02763     // Coordinates where words start and direction (0 = horizontal)
02764     0,7,0, 0,15,0, 3,4,1, 3,15,1, 4,3,0, 4,14,0, 4,19,0, 5,2,1, 6,12,0, 7,0,1, 7,19,1, 8,10,0, 8,10,1, 8,15,1, 9,9,0, 9,9,1, 9,14,0, 10,8,0, 10,8,1, 10,13,0, 10,13,1, 11,12,0, 12,6,1, 12,11,1, 13,10,0, 13,10,1, 14,4,1, 14,9,1, 15,0,1, 15,3,0, 15,8,0, 15,19,0, 15,19,1, 17,17,1, 19,4,1, 19,7,0, 19,15,0, 19,15,1, 
02765     // Length and number of words of that length
02766     3, 30,
02767     // Coordinates where words start and direction (0 = horizontal)
02768     0,3,0, 0,8,0, 0,14,0, 0,19,0, 3,0,1, 3,5,0, 3,11,0, 3,17,0, 3,20,1, 5,13,1, 5,17,1, 7,17,0, 8,0,1, 8,20,1, 11,3,1, 11,17,1, 13,5,0, 14,0,1, 14,20,1, 17,3,1, 17,5,0, 17,7,1, 17,11,0, 17,17,0, 19,0,1, 19,20,1, 20,3,0, 20,8,0, 20,14,0, 20,19,0, 
02769     // End marker
02770     0
02771   };
02772 
02773 
02774   /*
02775    * Name: 23.06, 23 x 23
02776    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02777    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02778    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02779    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _)
02780    *    (_ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _)
02781    *    (_ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02782    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02783    *    (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
02784    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _)
02785    *    (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
02786    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
02787    *    (_ _ _ _ * _ _ _ _ _ * * * _ _ _ _ _ * _ _ _ _)
02788    *    (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02789    *    (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
02790    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _)
02791    *    (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
02792    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02793    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _)
02794    *    (_ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _)
02795    *    (_ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
02796    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02797    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02798    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02799    */
02800   const int g45[] = {
02801     // Width and height of crossword grid
02802     23, 23,
02803     // Number of black fields
02804     69,
02805     // Black field coordinates
02806     0,7, 0,15, 1,7, 1,15, 2,7, 2,15, 3,3, 3,12, 3,19, 4,4, 4,11, 4,18, 5,5, 5,10, 5,17, 6,8, 6,14, 7,0, 7,1, 7,2, 7,7, 7,15, 7,20, 7,21, 7,22, 8,6, 8,16, 9,9, 9,13, 10,3, 10,11, 10,17, 11,4, 11,10, 11,11, 11,12, 11,18, 12,5, 12,11, 12,19, 13,9, 13,13, 14,6, 14,16, 15,0, 15,1, 15,2, 15,7, 15,15, 15,20, 15,21, 15,22, 16,8, 16,14, 17,5, 17,12, 17,17, 18,4, 18,11, 18,18, 19,3, 19,10, 19,19, 20,7, 20,15, 21,7, 21,15, 22,7, 22,15, 
02807     // Length and number of words of that length
02808     9, 12,
02809     // Coordinates where words start and direction (0 = horizontal)
02810     0,9,0, 0,13,0, 7,8,0, 7,14,0, 8,7,1, 9,0,1, 9,14,1, 13,0,1, 13,14,1, 14,7,1, 14,9,0, 14,13,0, 
02811     // Length and number of words of that length
02812     8, 12,
02813     // Coordinates where words start and direction (0 = horizontal)
02814     0,6,0, 0,16,0, 3,4,1, 4,19,0, 6,0,1, 6,15,1, 11,3,0, 15,6,0, 15,16,0, 16,0,1, 16,15,1, 19,11,1, 
02815     // Length and number of words of that length
02816     7, 44,
02817     // Coordinates where words start and direction (0 = horizontal)
02818     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,8,1, 0,16,1, 0,20,0, 0,21,0, 0,22,0, 1,0,1, 1,8,1, 1,16,1, 2,0,1, 2,8,1, 2,16,1, 4,12,0, 7,8,1, 8,0,0, 8,1,0, 8,2,0, 8,7,0, 8,15,0, 8,20,0, 8,21,0, 8,22,0, 10,4,1, 12,10,0, 12,12,1, 15,8,1, 16,0,0, 16,1,0, 16,2,0, 16,20,0, 16,21,0, 16,22,0, 20,0,1, 20,8,1, 20,16,1, 21,0,1, 21,8,1, 21,16,1, 22,0,1, 22,8,1, 22,16,1, 
02819     // Length and number of words of that length
02820     6, 24,
02821     // Coordinates where words start and direction (0 = horizontal)
02822     0,8,0, 0,14,0, 3,13,1, 4,3,0, 4,5,1, 4,12,1, 5,4,0, 5,11,1, 5,18,0, 6,5,0, 8,0,1, 8,17,1, 11,17,0, 12,4,0, 12,18,0, 13,19,0, 14,0,1, 14,17,1, 17,6,1, 17,8,0, 17,14,0, 18,5,1, 18,12,1, 19,4,1, 
02823     // Length and number of words of that length
02824     5, 24,
02825     // Coordinates where words start and direction (0 = horizontal)
02826     0,5,0, 0,10,0, 0,17,0, 5,0,1, 5,11,0, 5,18,1, 6,9,1, 6,10,0, 9,6,0, 9,16,0, 10,12,1, 10,18,1, 11,5,1, 11,13,1, 12,0,1, 12,6,1, 12,12,0, 13,11,0, 16,9,1, 17,0,1, 17,18,1, 18,5,0, 18,12,0, 18,17,0, 
02827     // Length and number of words of that length
02828     4, 24,
02829     // Coordinates where words start and direction (0 = horizontal)
02830     0,4,0, 0,11,0, 0,18,0, 3,7,0, 3,15,0, 4,0,1, 4,19,1, 5,6,1, 6,17,0, 7,3,1, 7,16,1, 11,0,1, 11,19,1, 13,5,0, 15,3,1, 15,16,1, 16,7,0, 16,15,0, 17,13,1, 18,0,1, 18,19,1, 19,4,0, 19,11,0, 19,18,0, 
02831     // Length and number of words of that length
02832     3, 16,
02833     // Coordinates where words start and direction (0 = horizontal)
02834     0,3,0, 0,12,0, 0,19,0, 3,0,1, 3,20,1, 9,10,1, 10,0,1, 10,9,0, 10,13,0, 12,20,1, 13,10,1, 19,0,1, 19,20,1, 20,3,0, 20,10,0, 20,19,0, 
02835     // End marker
02836     0
02837   };
02838 
02839 
02840   /*
02841    * Name: 23.07, 23 x 23
02842    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ *)
02843    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02844    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _)
02845    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
02846    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
02847    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02848    *    (_ _ _ _ _ * _ _ _ _ * * _ _ _ _ * _ _ _ * * *)
02849    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02850    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
02851    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _)
02852    *    (* * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02853    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
02854    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * *)
02855    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _)
02856    *    (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
02857    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ * _ _ _ _)
02858    *    (* * * _ _ _ * _ _ _ _ * * _ _ _ _ * _ _ _ _ _)
02859    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02860    *    (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
02861    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02862    *    (_ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
02863    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02864    *    (* _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02865    */
02866   const int g46[] = {
02867     // Width and height of crossword grid
02868     23, 23,
02869     // Number of black fields
02870     83,
02871     // Black field coordinates
02872     0,4, 0,10, 0,16, 0,22, 1,4, 1,10, 1,16, 2,4, 2,16, 3,8, 3,14, 3,19, 4,0, 4,1, 4,7, 4,13, 4,18, 5,6, 5,12, 5,17, 6,5, 6,10, 6,11, 6,16, 6,21, 6,22, 7,4, 7,15, 8,3, 8,9, 8,14, 8,19, 9,8, 9,18, 10,0, 10,1, 10,2, 10,6, 10,12, 10,17, 11,6, 11,11, 11,16, 12,5, 12,10, 12,16, 12,20, 12,21, 12,22, 13,4, 13,14, 14,3, 14,8, 14,13, 14,19, 15,7, 15,18, 16,0, 16,1, 16,6, 16,11, 16,12, 16,17, 17,5, 17,10, 17,16, 18,4, 18,9, 18,15, 18,21, 18,22, 19,3, 19,8, 19,14, 20,6, 20,18, 21,6, 21,12, 21,18, 22,0, 22,6, 22,12, 22,18, 
02873     // Length and number of words of that length
02874     12, 2,
02875     // Coordinates where words start and direction (0 = horizontal)
02876     0,20,0, 11,2,0, 
02877     // Length and number of words of that length
02878     11, 2,
02879     // Coordinates where words start and direction (0 = horizontal)
02880     2,5,1, 20,7,1, 
02881     // Length and number of words of that length
02882     10, 6,
02883     // Coordinates where words start and direction (0 = horizontal)
02884     0,2,0, 5,7,0, 7,5,1, 8,15,0, 13,20,0, 15,8,1, 
02885     // Length and number of words of that length
02886     9, 4,
02887     // Coordinates where words start and direction (0 = horizontal)
02888     5,13,0, 9,9,0, 9,9,1, 13,5,1, 
02889     // Length and number of words of that length
02890     8, 8,
02891     // Coordinates where words start and direction (0 = horizontal)
02892     0,3,0, 0,9,0, 3,0,1, 9,0,1, 13,15,1, 15,13,0, 15,19,0, 19,15,1, 
02893     // Length and number of words of that length
02894     7, 4,
02895     // Coordinates where words start and direction (0 = horizontal)
02896     0,15,0, 7,16,1, 15,0,1, 16,7,0, 
02897     // Length and number of words of that length
02898     6, 14,
02899     // Coordinates where words start and direction (0 = horizontal)
02900     0,5,0, 0,11,0, 0,21,0, 1,17,1, 2,17,1, 5,0,1, 11,0,1, 11,17,1, 17,1,0, 17,11,0, 17,17,0, 17,17,1, 20,0,1, 21,0,1, 
02901     // Length and number of words of that length
02902     5, 54,
02903     // Coordinates where words start and direction (0 = horizontal)
02904     0,5,1, 0,6,0, 0,11,1, 0,12,0, 0,17,0, 0,17,1, 1,5,1, 1,11,1, 1,22,0, 3,9,1, 4,2,1, 4,8,0, 4,8,1, 5,0,0, 5,1,0, 5,7,1, 5,18,1, 6,0,1, 7,5,0, 7,10,0, 7,21,0, 7,22,0, 8,4,0, 8,4,1, 9,3,0, 9,19,0, 10,7,1, 10,18,0, 10,18,1, 11,0,0, 11,1,0, 11,12,0, 11,17,0, 12,0,1, 12,11,1, 13,21,0, 13,22,0, 14,14,0, 14,14,1, 16,18,1, 17,0,0, 17,0,1, 17,11,1, 18,5,0, 18,10,0, 18,10,1, 18,16,0, 18,16,1, 19,9,1, 21,7,1, 21,13,1, 22,1,1, 22,7,1, 22,13,1, 
02905     // Length and number of words of that length
02906     4, 64,
02907     // Coordinates where words start and direction (0 = horizontal)
02908     0,0,0, 0,0,1, 0,1,0, 0,7,0, 0,13,0, 0,18,0, 1,0,1, 2,0,1, 2,10,0, 3,4,0, 3,15,1, 4,14,0, 4,14,1, 4,19,0, 4,19,1, 5,13,1, 5,18,0, 6,6,0, 6,6,1, 6,12,0, 6,12,1, 6,17,0, 6,17,1, 7,0,1, 7,11,0, 7,16,0, 8,10,1, 8,15,1, 9,14,0, 9,19,1, 10,8,0, 10,13,1, 11,7,1, 11,12,1, 12,6,0, 12,6,1, 12,11,0, 13,0,1, 13,5,0, 13,10,0, 13,16,0, 14,4,0, 14,4,1, 14,9,1, 15,3,0, 15,8,0, 15,19,1, 16,2,1, 16,7,1, 16,13,1, 16,18,0, 17,6,1, 17,12,0, 18,0,1, 18,5,1, 19,4,0, 19,4,1, 19,9,0, 19,15,0, 19,21,0, 19,22,0, 20,19,1, 21,19,1, 22,19,1, 
02909     // Length and number of words of that length
02910     3, 16,
02911     // Coordinates where words start and direction (0 = horizontal)
02912     0,8,0, 0,14,0, 0,19,0, 3,16,0, 3,20,1, 8,0,1, 8,20,1, 10,3,1, 12,17,1, 14,0,1, 14,20,1, 17,6,0, 19,0,1, 20,3,0, 20,8,0, 20,14,0, 
02913     // End marker
02914     0
02915   };
02916 
02917 
02918   /*
02919    * Name: 23.08, 23 x 23
02920    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02921    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02922    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02923    *    (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
02924    *    (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02925    *    (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _)
02926    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
02927    *    (* * * _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
02928    *    (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
02929    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
02930    *    (_ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02931    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
02932    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _)
02933    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02934    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
02935    *    (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ * * *)
02936    *    (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
02937    *    (_ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
02938    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
02939    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
02940    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02941    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02942    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02943    */
02944   const int g47[] = {
02945     // Width and height of crossword grid
02946     23, 23,
02947     // Number of black fields
02948     75,
02949     // Black field coordinates
02950     0,7, 0,15, 1,7, 1,15, 2,7, 2,15, 3,3, 3,8, 3,13, 3,19, 4,4, 4,12, 4,18, 5,5, 5,10, 5,17, 6,6, 6,11, 6,16, 7,0, 7,1, 7,2, 7,9, 7,15, 7,20, 7,21, 7,22, 8,3, 8,8, 8,14, 9,7, 9,13, 9,19, 10,5, 10,12, 10,18, 11,6, 11,11, 11,16, 12,4, 12,10, 12,17, 13,3, 13,9, 13,15, 14,8, 14,14, 14,19, 15,0, 15,1, 15,2, 15,7, 15,13, 15,20, 15,21, 15,22, 16,6, 16,11, 16,16, 17,5, 17,12, 17,17, 18,4, 18,10, 18,18, 19,3, 19,9, 19,14, 19,19, 20,7, 20,15, 21,7, 21,15, 22,7, 22,15, 
02951     // Length and number of words of that length
02952     8, 4,
02953     // Coordinates where words start and direction (0 = horizontal)
02954     0,14,0, 8,15,1, 14,0,1, 15,8,0, 
02955     // Length and number of words of that length
02956     7, 44,
02957     // Coordinates where words start and direction (0 = horizontal)
02958     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,8,1, 0,9,0, 0,16,1, 0,20,0, 0,21,0, 0,22,0, 1,0,1, 1,8,1, 1,16,1, 2,0,1, 2,8,1, 2,16,1, 4,5,1, 5,4,0, 8,0,0, 8,1,0, 8,2,0, 8,20,0, 8,21,0, 8,22,0, 9,0,1, 11,18,0, 13,16,1, 16,0,0, 16,1,0, 16,2,0, 16,13,0, 16,20,0, 16,21,0, 16,22,0, 18,11,1, 20,0,1, 20,8,1, 20,16,1, 21,0,1, 21,8,1, 21,16,1, 22,0,1, 22,8,1, 22,16,1, 
02959     // Length and number of words of that length
02960     6, 24,
02961     // Coordinates where words start and direction (0 = horizontal)
02962     0,6,0, 0,11,0, 0,16,0, 3,7,0, 5,11,1, 6,0,1, 6,10,0, 6,17,0, 6,17,1, 7,3,1, 10,6,1, 11,0,1, 11,5,0, 11,12,0, 11,17,1, 12,11,1, 14,15,0, 15,14,1, 16,0,1, 16,17,1, 17,6,0, 17,6,1, 17,11,0, 17,16,0, 
02963     // Length and number of words of that length
02964     5, 40,
02965     // Coordinates where words start and direction (0 = horizontal)
02966     0,5,0, 0,10,0, 0,17,0, 3,14,1, 4,13,0, 4,13,1, 4,19,0, 5,0,1, 5,12,0, 5,18,0, 5,18,1, 7,10,1, 8,9,0, 8,9,1, 8,15,0, 9,8,0, 9,8,1, 9,14,0, 9,14,1, 10,0,1, 10,7,0, 10,13,0, 10,13,1, 12,5,1, 12,18,1, 13,4,0, 13,4,1, 13,10,0, 13,10,1, 14,3,0, 14,9,0, 14,9,1, 15,8,1, 17,0,1, 17,18,1, 18,5,0, 18,5,1, 18,12,0, 18,17,0, 19,4,1, 
02967     // Length and number of words of that length
02968     4, 44,
02969     // Coordinates where words start and direction (0 = horizontal)
02970     0,4,0, 0,12,0, 0,18,0, 3,4,1, 3,9,1, 3,15,0, 4,0,1, 4,3,0, 4,8,0, 4,19,1, 5,6,1, 6,5,0, 6,7,1, 6,12,1, 7,6,0, 7,11,0, 7,16,0, 7,16,1, 8,4,1, 9,3,0, 10,19,0, 10,19,1, 11,7,1, 11,12,1, 12,0,1, 12,6,0, 12,11,0, 12,16,0, 13,17,0, 14,15,1, 15,3,1, 15,14,0, 15,19,0, 16,7,0, 16,7,1, 16,12,1, 17,13,1, 18,0,1, 18,19,1, 19,4,0, 19,10,0, 19,10,1, 19,15,1, 19,18,0, 
02971     // Length and number of words of that length
02972     3, 16,
02973     // Coordinates where words start and direction (0 = horizontal)
02974     0,3,0, 0,8,0, 0,13,0, 0,19,0, 3,0,1, 3,20,1, 8,0,1, 9,20,1, 13,0,1, 14,20,1, 19,0,1, 19,20,1, 20,3,0, 20,9,0, 20,14,0, 20,19,0, 
02975     // End marker
02976     0
02977   };
02978 
02979 
02980   /*
02981    * Name: 23.09, 23 x 23
02982    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02983    *    (_ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02984    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _)
02985    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02986    *    (_ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
02987    *    (* * * _ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ *)
02988    *    (_ _ _ * _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
02989    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _ _)
02990    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02991    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
02992    *    (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
02993    *    (* * _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ * *)
02994    *    (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
02995    *    (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
02996    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
02997    *    (_ _ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
02998    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ * _ _ _)
02999    *    (* _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _ * * *)
03000    *    (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _)
03001    *    (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
03002    *    (_ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
03003    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _)
03004    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
03005    */
03006   const int g48[] = {
03007     // Width and height of crossword grid
03008     23, 23,
03009     // Number of black fields
03010     76,
03011     // Black field coordinates
03012     0,5, 0,11, 0,17, 1,5, 1,11, 2,5, 3,6, 3,12, 3,18, 4,3, 4,9, 4,13, 4,17, 5,0, 5,4, 5,8, 5,14, 5,20, 5,21, 5,22, 6,7, 6,15, 6,19, 7,6, 7,10, 7,16, 8,5, 8,11, 8,17, 9,4, 9,12, 9,18, 10,3, 10,9, 10,15, 11,0, 11,1, 11,8, 11,14, 11,21, 11,22, 12,7, 12,13, 12,19, 13,4, 13,10, 13,18, 14,5, 14,11, 14,17, 15,6, 15,12, 15,16, 16,3, 16,7, 16,15, 17,0, 17,1, 17,2, 17,8, 17,14, 17,18, 17,22, 18,5, 18,9, 18,13, 18,19, 19,4, 19,10, 19,16, 20,17, 21,11, 21,17, 22,5, 22,11, 22,17, 
03013     // Length and number of words of that length
03014     17, 4,
03015     // Coordinates where words start and direction (0 = horizontal)
03016     0,2,0, 2,6,1, 6,20,0, 20,0,1, 
03017     // Length and number of words of that length
03018     11, 4,
03019     // Coordinates where words start and direction (0 = horizontal)
03020     0,1,0, 1,12,1, 12,21,0, 21,0,1, 
03021     // Length and number of words of that length
03022     7, 16,
03023     // Coordinates where words start and direction (0 = horizontal)
03024     0,10,0, 0,16,0, 5,13,0, 6,0,1, 6,8,1, 8,6,0, 8,16,0, 9,5,1, 10,16,1, 11,9,0, 12,0,1, 13,11,1, 16,6,0, 16,8,1, 16,12,0, 16,16,1, 
03025     // Length and number of words of that length
03026     6, 16,
03027     // Coordinates where words start and direction (0 = horizontal)
03028     0,7,0, 0,15,0, 0,19,0, 2,11,0, 3,0,1, 7,0,1, 7,17,1, 11,2,1, 11,15,1, 15,0,1, 15,11,0, 15,17,1, 17,3,0, 17,7,0, 17,15,0, 19,17,1, 
03029     // Length and number of words of that length
03030     5, 86,
03031     // Coordinates where words start and direction (0 = horizontal)
03032     0,0,0, 0,0,1, 0,4,0, 0,6,1, 0,8,0, 0,12,1, 0,14,0, 0,18,1, 0,20,0, 0,21,0, 0,22,0, 1,0,1, 1,6,1, 2,0,1, 3,5,0, 3,7,1, 3,13,1, 4,4,1, 4,12,0, 4,18,0, 4,18,1, 5,3,0, 5,9,0, 5,9,1, 5,15,1, 6,0,0, 6,8,0, 6,14,0, 6,21,0, 6,22,0, 7,7,0, 7,11,1, 7,19,0, 8,0,1, 8,6,1, 8,10,0, 8,12,1, 8,18,1, 9,5,0, 9,11,0, 9,13,1, 9,17,0, 10,4,1, 10,10,1, 10,12,0, 11,3,0, 11,9,1, 11,15,0, 12,0,0, 12,1,0, 12,8,0, 12,8,1, 12,14,0, 12,14,1, 12,22,0, 13,5,1, 13,13,0, 13,19,0, 14,0,1, 14,4,0, 14,6,1, 14,10,0, 14,12,1, 14,18,1, 15,7,1, 15,17,0, 17,3,1, 17,9,1, 18,0,0, 18,0,1, 18,1,0, 18,2,0, 18,8,0, 18,14,0, 18,14,1, 18,18,0, 18,22,0, 19,5,1, 19,11,1, 20,18,1, 21,12,1, 21,18,1, 22,0,1, 22,6,1, 22,12,1, 22,18,1, 
03033     // Length and number of words of that length
03034     4, 12,
03035     // Coordinates where words start and direction (0 = horizontal)
03036     0,3,0, 0,9,0, 0,13,0, 3,19,1, 9,0,1, 9,19,1, 13,0,1, 13,19,1, 19,0,1, 19,9,0, 19,13,0, 19,19,0, 
03037     // Length and number of words of that length
03038     3, 36,
03039     // Coordinates where words start and direction (0 = horizontal)
03040     0,6,0, 0,12,0, 0,18,0, 1,17,0, 4,0,1, 4,6,0, 4,10,1, 4,14,1, 5,1,1, 5,5,1, 5,17,0, 6,4,0, 6,16,1, 6,20,1, 7,7,1, 7,15,0, 10,0,1, 10,4,0, 10,18,0, 12,20,1, 13,7,0, 14,18,0, 15,5,0, 15,13,1, 16,0,1, 16,4,1, 16,16,0, 17,15,1, 17,19,1, 18,6,1, 18,10,1, 18,20,1, 19,5,0, 20,4,0, 20,10,0, 20,16,0, 
03041     // End marker
03042     0
03043   };
03044 
03045 
03046   /*
03047    * Name: 23.10, 23 x 23
03048    *    (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ * _ _ _ _ _)
03049    *    (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
03050    *    (_ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
03051    *    (_ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
03052    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
03053    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ *)
03054    *    (* * _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _)
03055    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
03056    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
03057    *    (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ * * *)
03058    *    (_ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
03059    *    (_ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _)
03060    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _)
03061    *    (* * * _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
03062    *    (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
03063    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
03064    *    (_ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ * *)
03065    *    (* _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
03066    *    (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
03067    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _)
03068    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _)
03069    *    (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
03070    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
03071    */
03072   const int g49[] = {
03073     // Width and height of crossword grid
03074     23, 23,
03075     // Number of black fields
03076     67,
03077     // Black field coordinates
03078     0,6, 0,13, 0,17, 1,6, 1,13, 2,13, 3,3, 3,12, 3,19, 4,5, 4,11, 4,17, 5,4, 5,10, 5,18, 5,22, 6,0, 6,1, 6,6, 6,16, 7,7, 7,15, 8,8, 8,14, 9,9, 9,13, 9,20, 9,21, 9,22, 10,5, 10,12, 10,19, 11,4, 11,11, 11,18, 12,3, 12,10, 12,17, 13,0, 13,1, 13,2, 13,9, 13,13, 14,8, 14,14, 15,7, 15,15, 16,6, 16,16, 16,21, 16,22, 17,0, 17,4, 17,12, 17,18, 18,5, 18,11, 18,17, 19,3, 19,10, 19,19, 20,9, 21,9, 21,16, 22,5, 22,9, 22,16, 
03079     // Length and number of words of that length
03080     13, 4,
03081     // Coordinates where words start and direction (0 = horizontal)
03082     0,2,0, 2,0,1, 10,20,0, 20,10,1, 
03083     // Length and number of words of that length
03084     9, 16,
03085     // Coordinates where words start and direction (0 = horizontal)
03086     0,9,0, 0,20,0, 0,21,0, 1,14,1, 2,14,1, 6,7,1, 7,6,0, 7,16,0, 9,0,1, 13,14,1, 14,1,0, 14,2,0, 14,13,0, 16,7,1, 20,0,1, 21,0,1, 
03087     // Length and number of words of that length
03088     8, 12,
03089     // Coordinates where words start and direction (0 = horizontal)
03090     0,8,0, 0,14,0, 3,4,1, 4,3,0, 8,0,1, 8,15,1, 11,19,0, 14,0,1, 14,15,1, 15,8,0, 15,14,0, 19,11,1, 
03091     // Length and number of words of that length
03092     7, 16,
03093     // Coordinates where words start and direction (0 = horizontal)
03094     0,7,0, 0,15,0, 5,11,1, 5,17,0, 7,0,1, 7,8,1, 7,16,1, 8,7,0, 8,15,0, 11,5,0, 15,0,1, 15,8,1, 15,16,1, 16,7,0, 16,15,0, 17,5,1, 
03095     // Length and number of words of that length
03096     6, 40,
03097     // Coordinates where words start and direction (0 = horizontal)
03098     0,0,0, 0,0,1, 0,1,0, 0,7,1, 0,16,0, 1,0,1, 1,7,1, 3,13,0, 3,13,1, 4,12,0, 4,19,0, 5,11,0, 6,10,0, 6,17,1, 7,0,0, 7,1,0, 9,14,1, 10,6,1, 10,13,1, 10,21,0, 10,22,0, 11,5,1, 11,12,0, 11,12,1, 12,4,1, 12,11,0, 12,11,1, 13,3,0, 13,3,1, 13,10,0, 14,9,0, 16,0,1, 17,6,0, 17,21,0, 17,22,0, 19,4,1, 21,10,1, 21,17,1, 22,10,1, 22,17,1, 
03099     // Length and number of words of that length
03100     5, 32,
03101     // Coordinates where words start and direction (0 = horizontal)
03102     0,4,0, 0,10,0, 0,18,0, 0,18,1, 0,22,0, 4,0,1, 4,6,1, 4,12,1, 4,18,1, 5,5,0, 5,5,1, 6,4,0, 6,18,0, 8,9,1, 9,8,0, 9,14,0, 10,0,1, 12,4,0, 12,18,0, 12,18,1, 13,17,0, 14,9,1, 17,13,1, 18,0,0, 18,0,1, 18,4,0, 18,6,1, 18,12,0, 18,12,1, 18,18,0, 18,18,1, 22,0,1, 
03103     // Length and number of words of that length
03104     4, 12,
03105     // Coordinates where words start and direction (0 = horizontal)
03106     0,5,0, 0,11,0, 2,6,0, 5,0,1, 6,2,1, 11,0,1, 11,19,1, 16,17,1, 17,16,0, 17,19,1, 19,11,0, 19,17,0, 
03107     // Length and number of words of that length
03108     3, 24,
03109     // Coordinates where words start and direction (0 = horizontal)
03110     0,3,0, 0,12,0, 0,14,1, 0,19,0, 1,17,0, 3,0,1, 3,20,1, 5,19,1, 6,22,0, 9,10,1, 10,9,0, 10,13,0, 10,20,1, 12,0,1, 13,10,1, 14,0,0, 17,1,1, 19,0,1, 19,5,0, 19,20,1, 20,3,0, 20,10,0, 20,19,0, 22,6,1, 
03111     // End marker
03112     0
03113   };
03114 
03115 
03116   /*
03117    * Name: puzzle01, 2 x 2
03118    *    (_ *)
03119    *    (_ _)
03120    */
03121   const int g50[] = {
03122     // Width and height of crossword grid
03123     2, 2,
03124     // Number of black fields
03125     1,
03126     // Black field coordinates
03127     1,0, 
03128     // Length and number of words of that length
03129     2, 2,
03130     // Coordinates where words start and direction (0 = horizontal)
03131     0,0,1, 0,1,0, 
03132     // Length and number of words of that length
03133     1, 2,
03134     // Coordinates where words start and direction (0 = horizontal)
03135     0,0,0, 1,1,1, 
03136     // End marker
03137     0
03138   };
03139 
03140 
03141   /*
03142    * Name: puzzle02, 3 x 3
03143    *    (* _ _)
03144    *    (_ _ _)
03145    *    (_ _ _)
03146    */
03147   const int g51[] = {
03148     // Width and height of crossword grid
03149     3, 3,
03150     // Number of black fields
03151     1,
03152     // Black field coordinates
03153     0,0, 
03154     // Length and number of words of that length
03155     3, 4,
03156     // Coordinates where words start and direction (0 = horizontal)
03157     0,1,0, 0,2,0, 1,0,1, 2,0,1, 
03158     // Length and number of words of that length
03159     2, 2,
03160     // Coordinates where words start and direction (0 = horizontal)
03161     0,1,1, 1,0,0, 
03162     // End marker
03163     0
03164   };
03165 
03166 
03167   /*
03168    * Name: puzzle03, 4 x 4
03169    *    (_ _ _ *)
03170    *    (_ _ _ _)
03171    *    (_ _ _ _)
03172    *    (* _ _ _)
03173    */
03174   const int g52[] = {
03175     // Width and height of crossword grid
03176     4, 4,
03177     // Number of black fields
03178     2,
03179     // Black field coordinates
03180     0,3, 3,0, 
03181     // Length and number of words of that length
03182     4, 4,
03183     // Coordinates where words start and direction (0 = horizontal)
03184     0,1,0, 0,2,0, 1,0,1, 2,0,1, 
03185     // Length and number of words of that length
03186     3, 4,
03187     // Coordinates where words start and direction (0 = horizontal)
03188     0,0,0, 0,0,1, 1,3,0, 3,1,1, 
03189     // End marker
03190     0
03191   };
03192 
03193 
03194   /*
03195    * Name: puzzle04, 5 x 5
03196    *    (_ _ _ * *)
03197    *    (_ _ _ _ *)
03198    *    (_ _ _ _ _)
03199    *    (* _ _ _ _)
03200    *    (* * _ _ _)
03201    */
03202   const int g53[] = {
03203     // Width and height of crossword grid
03204     5, 5,
03205     // Number of black fields
03206     6,
03207     // Black field coordinates
03208     0,3, 0,4, 1,4, 3,0, 4,0, 4,1, 
03209     // Length and number of words of that length
03210     5, 2,
03211     // Coordinates where words start and direction (0 = horizontal)
03212     0,2,0, 2,0,1, 
03213     // Length and number of words of that length
03214     4, 4,
03215     // Coordinates where words start and direction (0 = horizontal)
03216     0,1,0, 1,0,1, 1,3,0, 3,1,1, 
03217     // Length and number of words of that length
03218     3, 4,
03219     // Coordinates where words start and direction (0 = horizontal)
03220     0,0,0, 0,0,1, 2,4,0, 4,2,1, 
03221     // End marker
03222     0
03223   };
03224 
03225 
03226   /*
03227    * Name: puzzle05, 5 x 5
03228    *    (_ _ _ _ *)
03229    *    (_ _ _ * _)
03230    *    (_ _ _ _ _)
03231    *    (_ * _ _ _)
03232    *    (* _ _ _ _)
03233    */
03234   const int g54[] = {
03235     // Width and height of crossword grid
03236     5, 5,
03237     // Number of black fields
03238     4,
03239     // Black field coordinates
03240     0,4, 1,3, 3,1, 4,0, 
03241     // Length and number of words of that length
03242     5, 2,
03243     // Coordinates where words start and direction (0 = horizontal)
03244     0,2,0, 2,0,1, 
03245     // Length and number of words of that length
03246     4, 4,
03247     // Coordinates where words start and direction (0 = horizontal)
03248     0,0,0, 0,0,1, 1,4,0, 4,1,1, 
03249     // Length and number of words of that length
03250     3, 4,
03251     // Coordinates where words start and direction (0 = horizontal)
03252     0,1,0, 1,0,1, 2,3,0, 3,2,1, 
03253     // Length and number of words of that length
03254     1, 4,
03255     // Coordinates where words start and direction (0 = horizontal)
03256     0,3,0, 1,4,1, 3,0,1, 4,1,0, 
03257     // End marker
03258     0
03259   };
03260 
03261 
03262   /*
03263    * Name: puzzle06, 5 x 5
03264    *    (_ _ _ _ _)
03265    *    (_ _ _ * _)
03266    *    (_ _ _ _ _)
03267    *    (_ * _ _ _)
03268    *    (_ _ _ _ _)
03269    */
03270   const int g55[] = {
03271     // Width and height of crossword grid
03272     5, 5,
03273     // Number of black fields
03274     2,
03275     // Black field coordinates
03276     1,3, 3,1, 
03277     // Length and number of words of that length
03278     5, 6,
03279     // Coordinates where words start and direction (0 = horizontal)
03280     0,0,0, 0,0,1, 0,2,0, 0,4,0, 2,0,1, 4,0,1, 
03281     // Length and number of words of that length
03282     3, 4,
03283     // Coordinates where words start and direction (0 = horizontal)
03284     0,1,0, 1,0,1, 2,3,0, 3,2,1, 
03285     // Length and number of words of that length
03286     1, 4,
03287     // Coordinates where words start and direction (0 = horizontal)
03288     0,3,0, 1,4,1, 3,0,1, 4,1,0, 
03289     // End marker
03290     0
03291   };
03292 
03293 
03294   /*
03295    * Name: puzzle07, 6 x 6
03296    *    (_ _ _ _ _ *)
03297    *    (_ * _ _ _ _)
03298    *    (_ _ _ * _ _)
03299    *    (_ _ * _ _ _)
03300    *    (_ _ _ _ * _)
03301    *    (* _ _ _ _ _)
03302    */
03303   const int g56[] = {
03304     // Width and height of crossword grid
03305     6, 6,
03306     // Number of black fields
03307     6,
03308     // Black field coordinates
03309     0,5, 1,1, 2,3, 3,2, 4,4, 5,0, 
03310     // Length and number of words of that length
03311     5, 4,
03312     // Coordinates where words start and direction (0 = horizontal)
03313     0,0,0, 0,0,1, 1,5,0, 5,1,1, 
03314     // Length and number of words of that length
03315     4, 4,
03316     // Coordinates where words start and direction (0 = horizontal)
03317     0,4,0, 1,2,1, 2,1,0, 4,0,1, 
03318     // Length and number of words of that length
03319     3, 4,
03320     // Coordinates where words start and direction (0 = horizontal)
03321     0,2,0, 2,0,1, 3,3,0, 3,3,1, 
03322     // Length and number of words of that length
03323     2, 4,
03324     // Coordinates where words start and direction (0 = horizontal)
03325     0,3,0, 2,4,1, 3,0,1, 4,2,0, 
03326     // Length and number of words of that length
03327     1, 4,
03328     // Coordinates where words start and direction (0 = horizontal)
03329     0,1,0, 1,0,1, 4,5,1, 5,4,0, 
03330     // End marker
03331     0
03332   };
03333 
03334 
03335   /*
03336    * Name: puzzle08, 7 x 7
03337    *    (_ _ _ _ * _ _)
03338    *    (_ _ _ * _ _ _)
03339    *    (_ _ * _ _ _ *)
03340    *    (_ _ _ _ _ _ _)
03341    *    (* _ _ _ * _ _)
03342    *    (_ _ _ * _ _ _)
03343    *    (_ _ * _ _ _ _)
03344    */
03345   const int g57[] = {
03346     // Width and height of crossword grid
03347     7, 7,
03348     // Number of black fields
03349     8,
03350     // Black field coordinates
03351     0,4, 2,2, 2,6, 3,1, 3,5, 4,0, 4,4, 6,2, 
03352     // Length and number of words of that length
03353     7, 3,
03354     // Coordinates where words start and direction (0 = horizontal)
03355     0,3,0, 1,0,1, 5,0,1, 
03356     // Length and number of words of that length
03357     4, 4,
03358     // Coordinates where words start and direction (0 = horizontal)
03359     0,0,0, 0,0,1, 3,6,0, 6,3,1, 
03360     // Length and number of words of that length
03361     3, 9,
03362     // Coordinates where words start and direction (0 = horizontal)
03363     0,1,0, 0,5,0, 1,4,0, 2,3,1, 3,2,0, 3,2,1, 4,1,0, 4,1,1, 4,5,0, 
03364     // Length and number of words of that length
03365     2, 8,
03366     // Coordinates where words start and direction (0 = horizontal)
03367     0,2,0, 0,5,1, 0,6,0, 2,0,1, 4,5,1, 5,0,0, 5,4,0, 6,0,1, 
03368     // Length and number of words of that length
03369     1, 2,
03370     // Coordinates where words start and direction (0 = horizontal)
03371     3,0,1, 3,6,1, 
03372     // End marker
03373     0
03374   };
03375 
03376 
03377   /*
03378    * Name: puzzle09, 7 x 7
03379    *    (* * _ _ _ * *)
03380    *    (* _ _ _ _ _ *)
03381    *    (_ _ _ * _ _ _)
03382    *    (_ _ _ _ _ _ _)
03383    *    (_ _ _ * _ _ _)
03384    *    (* _ _ _ _ _ *)
03385    *    (* * _ _ _ * *)
03386    */
03387   const int g58[] = {
03388     // Width and height of crossword grid
03389     7, 7,
03390     // Number of black fields
03391     14,
03392     // Black field coordinates
03393     0,0, 0,1, 0,5, 0,6, 1,0, 1,6, 3,2, 3,4, 5,0, 5,6, 6,0, 6,1, 6,5, 6,6, 
03394     // Length and number of words of that length
03395     7, 3,
03396     // Coordinates where words start and direction (0 = horizontal)
03397     0,3,0, 2,0,1, 4,0,1, 
03398     // Length and number of words of that length
03399     5, 4,
03400     // Coordinates where words start and direction (0 = horizontal)
03401     1,1,0, 1,1,1, 1,5,0, 5,1,1, 
03402     // Length and number of words of that length
03403     3, 8,
03404     // Coordinates where words start and direction (0 = horizontal)
03405     0,2,0, 0,2,1, 0,4,0, 2,0,0, 2,6,0, 4,2,0, 4,4,0, 6,2,1, 
03406     // Length and number of words of that length
03407     2, 2,
03408     // Coordinates where words start and direction (0 = horizontal)
03409     3,0,1, 3,5,1, 
03410     // Length and number of words of that length
03411     1, 1,
03412     // Coordinates where words start and direction (0 = horizontal)
03413     3,3,1, 
03414     // End marker
03415     0
03416   };
03417 
03418 
03419   /*
03420    * Name: puzzle10, 7 x 7
03421    *    (_ _ _ * _ _ _)
03422    *    (_ _ _ * _ _ _)
03423    *    (_ _ _ _ _ _ _)
03424    *    (* * _ * _ * *)
03425    *    (_ _ _ _ _ _ _)
03426    *    (_ _ _ * _ _ _)
03427    *    (_ _ _ * _ _ _)
03428    */
03429   const int g59[] = {
03430     // Width and height of crossword grid
03431     7, 7,
03432     // Number of black fields
03433     9,
03434     // Black field coordinates
03435     0,3, 1,3, 3,0, 3,1, 3,3, 3,5, 3,6, 5,3, 6,3, 
03436     // Length and number of words of that length
03437     7, 4,
03438     // Coordinates where words start and direction (0 = horizontal)
03439     0,2,0, 0,4,0, 2,0,1, 4,0,1, 
03440     // Length and number of words of that length
03441     3, 16,
03442     // Coordinates where words start and direction (0 = horizontal)
03443     0,0,0, 0,0,1, 0,1,0, 0,4,1, 0,5,0, 0,6,0, 1,0,1, 1,4,1, 4,0,0, 4,1,0, 4,5,0, 4,6,0, 5,0,1, 5,4,1, 6,0,1, 6,4,1, 
03444     // Length and number of words of that length
03445     1, 4,
03446     // Coordinates where words start and direction (0 = horizontal)
03447     2,3,0, 3,2,1, 3,4,1, 4,3,0, 
03448     // End marker
03449     0
03450   };
03451 
03452 
03453   /*
03454    * Name: puzzle11, 7 x 7
03455    *    (* * _ _ _ _ *)
03456    *    (* _ _ _ _ _ _)
03457    *    (_ _ _ * _ _ _)
03458    *    (_ _ _ * _ _ _)
03459    *    (_ _ _ * _ _ _)
03460    *    (_ _ _ _ _ _ *)
03461    *    (* _ _ _ _ * *)
03462    */
03463   const int g60[] = {
03464     // Width and height of crossword grid
03465     7, 7,
03466     // Number of black fields
03467     11,
03468     // Black field coordinates
03469     0,0, 0,1, 0,6, 1,0, 3,2, 3,3, 3,4, 5,6, 6,0, 6,5, 6,6, 
03470     // Length and number of words of that length
03471     7, 2,
03472     // Coordinates where words start and direction (0 = horizontal)
03473     2,0,1, 4,0,1, 
03474     // Length and number of words of that length
03475     6, 4,
03476     // Coordinates where words start and direction (0 = horizontal)
03477     0,5,0, 1,1,0, 1,1,1, 5,0,1, 
03478     // Length and number of words of that length
03479     4, 4,
03480     // Coordinates where words start and direction (0 = horizontal)
03481     0,2,1, 1,6,0, 2,0,0, 6,1,1, 
03482     // Length and number of words of that length
03483     3, 6,
03484     // Coordinates where words start and direction (0 = horizontal)
03485     0,2,0, 0,3,0, 0,4,0, 4,2,0, 4,3,0, 4,4,0, 
03486     // Length and number of words of that length
03487     2, 2,
03488     // Coordinates where words start and direction (0 = horizontal)
03489     3,0,1, 3,5,1, 
03490     // End marker
03491     0
03492   };
03493 
03494 
03495   /*
03496    * Name: puzzle12, 8 x 8
03497    *    (_ _ _ _ * _ _ _)
03498    *    (_ _ _ _ * _ _ _)
03499    *    (_ _ _ _ * _ _ _)
03500    *    (* * * _ _ _ _ _)
03501    *    (_ _ _ _ _ * * *)
03502    *    (_ _ _ * _ _ _ _)
03503    *    (_ _ _ * _ _ _ _)
03504    *    (_ _ _ * _ _ _ _)
03505    */
03506   const int g61[] = {
03507     // Width and height of crossword grid
03508     8, 8,
03509     // Number of black fields
03510     12,
03511     // Black field coordinates
03512     0,3, 1,3, 2,3, 3,5, 3,6, 3,7, 4,0, 4,1, 4,2, 5,4, 6,4, 7,4, 
03513     // Length and number of words of that length
03514     5, 4,
03515     // Coordinates where words start and direction (0 = horizontal)
03516     0,4,0, 3,0,1, 3,3,0, 4,3,1, 
03517     // Length and number of words of that length
03518     4, 12,
03519     // Coordinates where words start and direction (0 = horizontal)
03520     0,0,0, 0,1,0, 0,2,0, 0,4,1, 1,4,1, 2,4,1, 4,5,0, 4,6,0, 4,7,0, 5,0,1, 6,0,1, 7,0,1, 
03521     // Length and number of words of that length
03522     3, 12,
03523     // Coordinates where words start and direction (0 = horizontal)
03524     0,0,1, 0,5,0, 0,6,0, 0,7,0, 1,0,1, 2,0,1, 5,0,0, 5,1,0, 5,2,0, 5,5,1, 6,5,1, 7,5,1, 
03525     // End marker
03526     0
03527   };
03528 
03529 
03530   /*
03531    * Name: puzzle13, 9 x 9
03532    *    (_ _ _ _ * _ _ _ _)
03533    *    (_ _ _ _ * _ _ _ _)
03534    *    (_ _ _ * * * _ _ _)
03535    *    (_ _ _ _ _ _ _ _ _)
03536    *    (* * * _ _ _ * * *)
03537    *    (_ _ _ _ _ _ _ _ _)
03538    *    (_ _ _ * * * _ _ _)
03539    *    (_ _ _ _ * _ _ _ _)
03540    *    (_ _ _ _ * _ _ _ _)
03541    */
03542   const int g62[] = {
03543     // Width and height of crossword grid
03544     9, 9,
03545     // Number of black fields
03546     16,
03547     // Black field coordinates
03548     0,4, 1,4, 2,4, 3,2, 3,6, 4,0, 4,1, 4,2, 4,6, 4,7, 4,8, 5,2, 5,6, 6,4, 7,4, 8,4, 
03549     // Length and number of words of that length
03550     9, 2,
03551     // Coordinates where words start and direction (0 = horizontal)
03552     0,3,0, 0,5,0, 
03553     // Length and number of words of that length
03554     4, 20,
03555     // Coordinates where words start and direction (0 = horizontal)
03556     0,0,0, 0,0,1, 0,1,0, 0,5,1, 0,7,0, 0,8,0, 1,0,1, 1,5,1, 2,0,1, 2,5,1, 5,0,0, 5,1,0, 5,7,0, 5,8,0, 6,0,1, 6,5,1, 7,0,1, 7,5,1, 8,0,1, 8,5,1, 
03557     // Length and number of words of that length
03558     3, 8,
03559     // Coordinates where words start and direction (0 = horizontal)
03560     0,2,0, 0,6,0, 3,3,1, 3,4,0, 4,3,1, 5,3,1, 6,2,0, 6,6,0, 
03561     // Length and number of words of that length
03562     2, 4,
03563     // Coordinates where words start and direction (0 = horizontal)
03564     3,0,1, 3,7,1, 5,0,1, 5,7,1, 
03565     // End marker
03566     0
03567   };
03568 
03569 
03570   /*
03571    * Name: puzzle14, 10 x 10
03572    *    (* * * _ _ _ _ * * *)
03573    *    (* * _ _ _ _ _ * * *)
03574    *    (* _ _ _ _ _ _ _ * *)
03575    *    (_ _ _ _ _ * * _ _ _)
03576    *    (_ _ _ _ * * * _ _ _)
03577    *    (_ _ _ * * * _ _ _ _)
03578    *    (_ _ _ * * _ _ _ _ _)
03579    *    (* * _ _ _ _ _ _ _ *)
03580    *    (* * * _ _ _ _ _ * *)
03581    *    (* * * _ _ _ _ * * *)
03582    */
03583   const int g63[] = {
03584     // Width and height of crossword grid
03585     10, 10,
03586     // Number of black fields
03587     38,
03588     // Black field coordinates
03589     0,0, 0,1, 0,2, 0,7, 0,8, 0,9, 1,0, 1,1, 1,7, 1,8, 1,9, 2,0, 2,8, 2,9, 3,5, 3,6, 4,4, 4,5, 4,6, 5,3, 5,4, 5,5, 6,3, 6,4, 7,0, 7,1, 7,9, 8,0, 8,1, 8,2, 8,8, 8,9, 9,0, 9,1, 9,2, 9,7, 9,8, 9,9, 
03590     // Length and number of words of that length
03591     7, 4,
03592     // Coordinates where words start and direction (0 = horizontal)
03593     1,2,0, 2,1,1, 2,7,0, 7,2,1, 
03594     // Length and number of words of that length
03595     5, 8,
03596     // Coordinates where words start and direction (0 = horizontal)
03597     0,3,0, 1,2,1, 2,1,0, 3,0,1, 3,8,0, 5,6,0, 6,5,1, 8,3,1, 
03598     // Length and number of words of that length
03599     4, 8,
03600     // Coordinates where words start and direction (0 = horizontal)
03601     0,3,1, 0,4,0, 3,0,0, 3,9,0, 4,0,1, 5,6,1, 6,5,0, 9,3,1, 
03602     // Length and number of words of that length
03603     3, 8,
03604     // Coordinates where words start and direction (0 = horizontal)
03605     0,5,0, 0,6,0, 3,7,1, 4,7,1, 5,0,1, 6,0,1, 7,3,0, 7,4,0, 
03606     // End marker
03607     0
03608   };
03609 
03610 
03611   /*
03612    * Name: puzzle15, 11 x 11
03613    *    (_ _ _ _ * * * _ _ _ _)
03614    *    (_ _ _ _ _ * _ _ _ _ _)
03615    *    (_ _ _ _ _ * _ _ _ _ _)
03616    *    (_ _ _ * _ _ _ * _ _ _)
03617    *    (* _ _ _ _ _ * _ _ _ *)
03618    *    (* * * _ _ _ _ _ * * *)
03619    *    (* _ _ _ * _ _ _ _ _ *)
03620    *    (_ _ _ * _ _ _ * _ _ _)
03621    *    (_ _ _ _ _ * _ _ _ _ _)
03622    *    (_ _ _ _ _ * _ _ _ _ _)
03623    *    (_ _ _ _ * * * _ _ _ _)
03624    */
03625   const int g64[] = {
03626     // Width and height of crossword grid
03627     11, 11,
03628     // Number of black fields
03629     26,
03630     // Black field coordinates
03631     0,4, 0,5, 0,6, 1,5, 2,5, 3,3, 3,7, 4,0, 4,6, 4,10, 5,0, 5,1, 5,2, 5,8, 5,9, 5,10, 6,0, 6,4, 6,10, 7,3, 7,7, 8,5, 9,5, 10,4, 10,5, 10,6, 
03632     // Length and number of words of that length
03633     5, 22,
03634     // Coordinates where words start and direction (0 = horizontal)
03635     0,1,0, 0,2,0, 0,8,0, 0,9,0, 1,0,1, 1,4,0, 1,6,1, 2,0,1, 2,6,1, 3,5,0, 4,1,1, 5,3,1, 5,6,0, 6,1,0, 6,2,0, 6,5,1, 6,8,0, 6,9,0, 8,0,1, 8,6,1, 9,0,1, 9,6,1, 
03636     // Length and number of words of that length
03637     4, 8,
03638     // Coordinates where words start and direction (0 = horizontal)
03639     0,0,0, 0,0,1, 0,7,1, 0,10,0, 7,0,0, 7,10,0, 10,0,1, 10,7,1, 
03640     // Length and number of words of that length
03641     3, 16,
03642     // Coordinates where words start and direction (0 = horizontal)
03643     0,3,0, 0,7,0, 1,6,0, 3,0,1, 3,4,1, 3,8,1, 4,3,0, 4,7,0, 4,7,1, 6,1,1, 7,0,1, 7,4,0, 7,4,1, 7,8,1, 8,3,0, 8,7,0, 
03644     // End marker
03645     0
03646   };
03647 
03648 
03649   /*
03650    * Name: puzzle16, 13 x 13
03651    *    (_ _ _ * _ _ _ _ * _ _ _ _)
03652    *    (_ _ _ * _ _ _ _ * _ _ _ _)
03653    *    (_ _ _ * _ _ _ _ * _ _ _ _)
03654    *    (_ _ _ _ _ _ * _ _ _ * * *)
03655    *    (* * * _ _ _ * _ _ _ _ _ _)
03656    *    (_ _ _ _ _ * _ _ _ * _ _ _)
03657    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03658    *    (_ _ _ * _ _ _ * _ _ _ _ _)
03659    *    (_ _ _ _ _ _ * _ _ _ * * *)
03660    *    (* * * _ _ _ * _ _ _ _ _ _)
03661    *    (_ _ _ _ * _ _ _ _ * _ _ _)
03662    *    (_ _ _ _ * _ _ _ _ * _ _ _)
03663    *    (_ _ _ _ * _ _ _ _ * _ _ _)
03664    */
03665   const int g65[] = {
03666     // Width and height of crossword grid
03667     13, 13,
03668     // Number of black fields
03669     34,
03670     // Black field coordinates
03671     0,4, 0,9, 1,4, 1,9, 2,4, 2,9, 3,0, 3,1, 3,2, 3,7, 4,6, 4,10, 4,11, 4,12, 5,5, 6,3, 6,4, 6,8, 6,9, 7,7, 8,0, 8,1, 8,2, 8,6, 9,5, 9,10, 9,11, 9,12, 10,3, 10,8, 11,3, 11,8, 12,3, 12,8, 
03672     // Length and number of words of that length
03673     7, 2,
03674     // Coordinates where words start and direction (0 = horizontal)
03675     5,6,1, 7,0,1, 
03676     // Length and number of words of that length
03677     6, 6,
03678     // Coordinates where words start and direction (0 = horizontal)
03679     0,3,0, 0,8,0, 4,0,1, 7,4,0, 7,9,0, 8,7,1, 
03680     // Length and number of words of that length
03681     5, 6,
03682     // Coordinates where words start and direction (0 = horizontal)
03683     0,5,0, 3,8,1, 5,0,1, 7,8,1, 8,7,0, 9,0,1, 
03684     // Length and number of words of that length
03685     4, 28,
03686     // Coordinates where words start and direction (0 = horizontal)
03687     0,0,1, 0,5,1, 0,6,0, 0,10,0, 0,11,0, 0,12,0, 1,0,1, 1,5,1, 2,0,1, 2,5,1, 3,3,1, 4,0,0, 4,1,0, 4,2,0, 5,10,0, 5,11,0, 5,12,0, 9,0,0, 9,1,0, 9,2,0, 9,6,0, 9,6,1, 10,4,1, 10,9,1, 11,4,1, 11,9,1, 12,4,1, 12,9,1, 
03688     // Length and number of words of that length
03689     3, 26,
03690     // Coordinates where words start and direction (0 = horizontal)
03691     0,0,0, 0,1,0, 0,2,0, 0,7,0, 0,10,1, 1,10,1, 2,10,1, 3,4,0, 3,9,0, 4,7,0, 4,7,1, 5,6,0, 6,0,1, 6,5,0, 6,5,1, 6,10,1, 7,3,0, 7,8,0, 8,3,1, 10,0,1, 10,5,0, 10,10,0, 10,11,0, 10,12,0, 11,0,1, 12,0,1, 
03692     // End marker
03693     0
03694   };
03695 
03696 
03697   /*
03698    * Name: puzzle17, 15 x 15
03699    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _)
03700    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _)
03701    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
03702    *    (* * _ _ _ _ * _ _ _ _ _ _ * *)
03703    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
03704    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03705    *    (_ _ _ _ _ _ _ * _ _ _ * _ _ _)
03706    *    (* * * _ _ _ * * * _ _ _ * * *)
03707    *    (_ _ _ * _ _ _ * _ _ _ _ _ _ _)
03708    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03709    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
03710    *    (* * _ _ _ _ _ _ * _ _ _ _ * *)
03711    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
03712    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _)
03713    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _)
03714    */
03715   const int g66[] = {
03716     // Width and height of crossword grid
03717     15, 15,
03718     // Number of black fields
03719     45,
03720     // Black field coordinates
03721     0,3, 0,7, 0,11, 1,3, 1,7, 1,11, 2,7, 3,0, 3,1, 3,8, 3,13, 3,14, 4,5, 4,9, 5,4, 5,10, 6,3, 6,7, 7,0, 7,1, 7,2, 7,6, 7,7, 7,8, 7,12, 7,13, 7,14, 8,7, 8,11, 9,4, 9,10, 10,5, 10,9, 11,0, 11,1, 11,6, 11,13, 11,14, 12,7, 13,3, 13,7, 13,11, 14,3, 14,7, 14,11, 
03722     // Length and number of words of that length
03723     7, 12,
03724     // Coordinates where words start and direction (0 = horizontal)
03725     0,2,0, 0,6,0, 0,12,0, 2,0,1, 2,8,1, 6,8,1, 8,0,1, 8,2,0, 8,8,0, 8,12,0, 12,0,1, 12,8,1, 
03726     // Length and number of words of that length
03727     6, 4,
03728     // Coordinates where words start and direction (0 = horizontal)
03729     2,11,0, 3,2,1, 7,3,0, 11,7,1, 
03730     // Length and number of words of that length
03731     5, 12,
03732     // Coordinates where words start and direction (0 = horizontal)
03733     0,4,0, 0,10,0, 4,0,1, 4,10,1, 5,5,0, 5,5,1, 5,9,0, 9,5,1, 10,0,1, 10,4,0, 10,10,0, 10,10,1, 
03734     // Length and number of words of that length
03735     4, 12,
03736     // Coordinates where words start and direction (0 = horizontal)
03737     0,5,0, 0,9,0, 2,3,0, 3,9,1, 5,0,1, 5,11,1, 9,0,1, 9,11,0, 9,11,1, 11,2,1, 11,5,0, 11,9,0, 
03738     // Length and number of words of that length
03739     3, 48,
03740     // Coordinates where words start and direction (0 = horizontal)
03741     0,0,0, 0,0,1, 0,1,0, 0,4,1, 0,8,0, 0,8,1, 0,12,1, 0,13,0, 0,14,0, 1,0,1, 1,4,1, 1,8,1, 1,12,1, 3,7,0, 4,0,0, 4,1,0, 4,6,1, 4,8,0, 4,13,0, 4,14,0, 6,0,1, 6,4,0, 6,4,1, 6,10,0, 7,3,1, 7,9,1, 8,0,0, 8,1,0, 8,6,0, 8,8,1, 8,12,1, 8,13,0, 8,14,0, 9,7,0, 10,6,1, 12,0,0, 12,1,0, 12,6,0, 12,13,0, 12,14,0, 13,0,1, 13,4,1, 13,8,1, 13,12,1, 14,0,1, 14,4,1, 14,8,1, 14,12,1, 
03742     // End marker
03743     0
03744   };
03745 
03746 
03747   /*
03748    * Name: puzzle18, 15 x 15
03749    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03750    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03751    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03752    *    (_ _ _ _ _ * _ _ _ * * _ _ _ _)
03753    *    (* * * * _ _ _ * * _ _ _ * * *)
03754    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _)
03755    *    (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
03756    *    (_ _ _ _ * * _ _ _ * * _ _ _ _)
03757    *    (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
03758    *    (_ _ _ * _ _ _ * _ _ _ * _ _ _)
03759    *    (* * * _ _ _ * * _ _ _ * * * *)
03760    *    (_ _ _ _ * * _ _ _ * _ _ _ _ _)
03761    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03762    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03763    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03764    */
03765   const int g67[] = {
03766     // Width and height of crossword grid
03767     15, 15,
03768     // Number of black fields
03769     48,
03770     // Black field coordinates
03771     0,4, 0,10, 1,4, 1,10, 2,4, 2,10, 3,4, 3,5, 3,9, 4,0, 4,1, 4,2, 4,6, 4,7, 4,11, 4,12, 4,13, 4,14, 5,3, 5,7, 5,11, 6,10, 7,4, 7,5, 7,9, 7,10, 8,4, 9,3, 9,7, 9,11, 10,0, 10,1, 10,2, 10,3, 10,7, 10,8, 10,12, 10,13, 10,14, 11,5, 11,9, 11,10, 12,4, 12,10, 13,4, 13,10, 14,4, 14,10, 
03772     // Length and number of words of that length
03773     10, 4,
03774     // Coordinates where words start and direction (0 = horizontal)
03775     0,8,0, 5,6,0, 6,0,1, 8,5,1, 
03776     // Length and number of words of that length
03777     5, 16,
03778     // Coordinates where words start and direction (0 = horizontal)
03779     0,3,0, 0,5,1, 1,5,1, 2,5,1, 3,10,1, 5,0,0, 5,1,0, 5,2,0, 5,12,0, 5,13,0, 5,14,0, 10,11,0, 11,0,1, 12,5,1, 13,5,1, 14,5,1, 
03780     // Length and number of words of that length
03781     4, 36,
03782     // Coordinates where words start and direction (0 = horizontal)
03783     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,6,0, 0,7,0, 0,11,0, 0,11,1, 0,12,0, 0,13,0, 0,14,0, 1,0,1, 1,11,1, 2,0,1, 2,11,1, 3,0,1, 6,11,1, 7,0,1, 7,11,1, 8,0,1, 11,0,0, 11,1,0, 11,2,0, 11,3,0, 11,7,0, 11,8,0, 11,11,1, 11,12,0, 11,13,0, 11,14,0, 12,0,1, 12,11,1, 13,0,1, 13,11,1, 14,0,1, 14,11,1, 
03784     // Length and number of words of that length
03785     3, 30,
03786     // Coordinates where words start and direction (0 = horizontal)
03787     0,5,0, 0,9,0, 3,6,1, 3,10,0, 4,3,1, 4,4,0, 4,5,0, 4,8,1, 4,9,0, 5,0,1, 5,4,1, 5,8,1, 5,12,1, 6,3,0, 6,7,0, 6,11,0, 7,6,1, 8,5,0, 8,9,0, 8,10,0, 9,0,1, 9,4,0, 9,4,1, 9,8,1, 9,12,1, 10,4,1, 10,9,1, 11,6,1, 12,5,0, 12,9,0, 
03788     // End marker
03789     0
03790   };
03791 
03792 
03793   /*
03794    * Name: puzzle19, 15 x 15
03795    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03796    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03797    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03798    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
03799    *    (* * * _ _ _ * _ _ _ _ _ * * *)
03800    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
03801    *    (_ _ _ _ * _ _ _ _ _ _ * _ _ _)
03802    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03803    *    (_ _ _ * _ _ _ _ _ _ * _ _ _ _)
03804    *    (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
03805    *    (* * * _ _ _ _ _ * _ _ _ * * *)
03806    *    (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
03807    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03808    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03809    *    (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
03810    */
03811   const int g68[] = {
03812     // Width and height of crossword grid
03813     15, 15,
03814     // Number of black fields
03815     38,
03816     // Black field coordinates
03817     0,4, 0,10, 1,4, 1,10, 2,4, 2,10, 3,8, 4,0, 4,1, 4,2, 4,6, 4,7, 4,12, 4,13, 4,14, 5,5, 5,9, 6,4, 7,3, 7,11, 8,10, 9,5, 9,9, 10,0, 10,1, 10,2, 10,7, 10,8, 10,12, 10,13, 10,14, 11,6, 12,4, 12,10, 13,4, 13,10, 14,4, 14,10, 
03818     // Length and number of words of that length
03819     10, 2,
03820     // Coordinates where words start and direction (0 = horizontal)
03821     6,5,1, 8,0,1, 
03822     // Length and number of words of that length
03823     8, 2,
03824     // Coordinates where words start and direction (0 = horizontal)
03825     3,0,1, 11,7,1, 
03826     // Length and number of words of that length
03827     7, 5,
03828     // Coordinates where words start and direction (0 = horizontal)
03829     0,3,0, 0,11,0, 7,4,1, 8,3,0, 8,11,0, 
03830     // Length and number of words of that length
03831     6, 4,
03832     // Coordinates where words start and direction (0 = horizontal)
03833     3,9,1, 4,8,0, 5,6,0, 11,0,1, 
03834     // Length and number of words of that length
03835     5, 23,
03836     // Coordinates where words start and direction (0 = horizontal)
03837     0,5,0, 0,5,1, 0,9,0, 1,5,1, 2,5,1, 3,10,0, 5,0,0, 5,0,1, 5,1,0, 5,2,0, 5,7,0, 5,10,1, 5,12,0, 5,13,0, 5,14,0, 7,4,0, 9,0,1, 9,10,1, 10,5,0, 10,9,0, 12,5,1, 13,5,1, 14,5,1, 
03838     // Length and number of words of that length
03839     4, 32,
03840     // Coordinates where words start and direction (0 = horizontal)
03841     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,6,0, 0,7,0, 0,11,1, 0,12,0, 0,13,0, 0,14,0, 1,0,1, 1,11,1, 2,0,1, 2,11,1, 4,8,1, 6,0,1, 8,11,1, 10,3,1, 11,0,0, 11,1,0, 11,2,0, 11,7,0, 11,8,0, 11,12,0, 11,13,0, 11,14,0, 12,0,1, 12,11,1, 13,0,1, 13,11,1, 14,0,1, 14,11,1, 
03842     // Length and number of words of that length
03843     3, 12,
03844     // Coordinates where words start and direction (0 = horizontal)
03845     0,8,0, 3,4,0, 4,3,1, 5,6,1, 6,5,0, 6,9,0, 7,0,1, 7,12,1, 9,6,1, 9,10,0, 10,9,1, 12,6,0, 
03846     // End marker
03847     0
03848   };
03849 
03850 
03851   /*
03852    * Name: puzzle20, 9 x 9
03853    *    (* * * _ _ _ * * *)
03854    *    (* * _ _ _ _ _ * *)
03855    *    (* _ _ _ _ _ _ _ *)
03856    *    (_ _ _ _ * _ _ _ _)
03857    *    (_ _ _ * * * _ _ _)
03858    *    (_ _ _ _ * _ _ _ _)
03859    *    (* _ _ _ _ _ _ _ *)
03860    *    (* * _ _ _ _ _ * *)
03861    *    (* * * _ _ _ * * *)
03862    */
03863   const int g69[] = {
03864     // Width and height of crossword grid
03865     9, 9,
03866     // Number of black fields
03867     29,
03868     // Black field coordinates
03869     0,0, 0,1, 0,2, 0,6, 0,7, 0,8, 1,0, 1,1, 1,7, 1,8, 2,0, 2,8, 3,4, 4,3, 4,4, 4,5, 5,4, 6,0, 6,8, 7,0, 7,1, 7,7, 7,8, 8,0, 8,1, 8,2, 8,6, 8,7, 8,8, 
03870     // Length and number of words of that length
03871     7, 4,
03872     // Coordinates where words start and direction (0 = horizontal)
03873     1,2,0, 1,6,0, 2,1,1, 6,1,1, 
03874     // Length and number of words of that length
03875     5, 4,
03876     // Coordinates where words start and direction (0 = horizontal)
03877     1,2,1, 2,1,0, 2,7,0, 7,2,1, 
03878     // Length and number of words of that length
03879     4, 8,
03880     // Coordinates where words start and direction (0 = horizontal)
03881     0,3,0, 0,5,0, 3,0,1, 3,5,1, 5,0,1, 5,3,0, 5,5,0, 5,5,1, 
03882     // Length and number of words of that length
03883     3, 8,
03884     // Coordinates where words start and direction (0 = horizontal)
03885     0,3,1, 0,4,0, 3,0,0, 3,8,0, 4,0,1, 4,6,1, 6,4,0, 8,3,1, 
03886     // End marker
03887     0
03888   };
03889 
03890 
03891   /*
03892    * Name: puzzle21, 13 x 13
03893    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03894    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03895    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03896    *    (_ _ _ _ _ _ * _ _ _ _ _ _)
03897    *    (* * * _ _ _ * _ _ _ * * *)
03898    *    (_ _ _ _ _ * * * _ _ _ _ _)
03899    *    (_ _ _ * * * * * * * _ _ _)
03900    *    (_ _ _ _ _ * * * _ _ _ _ _)
03901    *    (* * * _ _ _ * _ _ _ * * *)
03902    *    (_ _ _ _ _ _ * _ _ _ _ _ _)
03903    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03904    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03905    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03906    */
03907   const int g70[] = {
03908     // Width and height of crossword grid
03909     13, 13,
03910     // Number of black fields
03911     41,
03912     // Black field coordinates
03913     0,4, 0,8, 1,4, 1,8, 2,4, 2,8, 3,6, 4,0, 4,1, 4,2, 4,6, 4,10, 4,11, 4,12, 5,5, 5,6, 5,7, 6,3, 6,4, 6,5, 6,6, 6,7, 6,8, 6,9, 7,5, 7,6, 7,7, 8,0, 8,1, 8,2, 8,6, 8,10, 8,11, 8,12, 9,6, 10,4, 10,8, 11,4, 11,8, 12,4, 12,8, 
03914     // Length and number of words of that length
03915     6, 8,
03916     // Coordinates where words start and direction (0 = horizontal)
03917     0,3,0, 0,9,0, 3,0,1, 3,7,1, 7,3,0, 7,9,0, 9,0,1, 9,7,1, 
03918     // Length and number of words of that length
03919     5, 8,
03920     // Coordinates where words start and direction (0 = horizontal)
03921     0,5,0, 0,7,0, 5,0,1, 5,8,1, 7,0,1, 7,8,1, 8,5,0, 8,7,0, 
03922     // Length and number of words of that length
03923     4, 24,
03924     // Coordinates where words start and direction (0 = horizontal)
03925     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,9,1, 0,10,0, 0,11,0, 0,12,0, 1,0,1, 1,9,1, 2,0,1, 2,9,1, 9,0,0, 9,1,0, 9,2,0, 9,10,0, 9,11,0, 9,12,0, 10,0,1, 10,9,1, 11,0,1, 11,9,1, 12,0,1, 12,9,1, 
03926     // Length and number of words of that length
03927     3, 24,
03928     // Coordinates where words start and direction (0 = horizontal)
03929     0,5,1, 0,6,0, 1,5,1, 2,5,1, 3,4,0, 3,8,0, 4,3,1, 4,7,1, 5,0,0, 5,1,0, 5,2,0, 5,10,0, 5,11,0, 5,12,0, 6,0,1, 6,10,1, 7,4,0, 7,8,0, 8,3,1, 8,7,1, 10,5,1, 10,6,0, 11,5,1, 12,5,1, 
03930     // End marker
03931     0
03932   };
03933 
03934 
03935   /*
03936    * Name: puzzle22, 13 x 13
03937    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03938    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03939    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03940    *    (_ _ _ _ _ _ _ _ _ _ _ _ _)
03941    *    (* * * _ _ _ * _ _ _ * * *)
03942    *    (_ _ _ _ _ * * * _ _ _ _ _)
03943    *    (_ _ _ _ * * * * * _ _ _ _)
03944    *    (_ _ _ _ _ * * * _ _ _ _ _)
03945    *    (* * * _ _ _ * _ _ _ * * *)
03946    *    (_ _ _ _ _ _ _ _ _ _ _ _ _)
03947    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03948    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03949    *    (_ _ _ _ * _ _ _ * _ _ _ _)
03950    */
03951   const int g71[] = {
03952     // Width and height of crossword grid
03953     13, 13,
03954     // Number of black fields
03955     37,
03956     // Black field coordinates
03957     0,4, 0,8, 1,4, 1,8, 2,4, 2,8, 4,0, 4,1, 4,2, 4,6, 4,10, 4,11, 4,12, 5,5, 5,6, 5,7, 6,4, 6,5, 6,6, 6,7, 6,8, 7,5, 7,6, 7,7, 8,0, 8,1, 8,2, 8,6, 8,10, 8,11, 8,12, 10,4, 10,8, 11,4, 11,8, 12,4, 12,8, 
03958     // Length and number of words of that length
03959     13, 4,
03960     // Coordinates where words start and direction (0 = horizontal)
03961     0,3,0, 0,9,0, 3,0,1, 9,0,1, 
03962     // Length and number of words of that length
03963     5, 8,
03964     // Coordinates where words start and direction (0 = horizontal)
03965     0,5,0, 0,7,0, 5,0,1, 5,8,1, 7,0,1, 7,8,1, 8,5,0, 8,7,0, 
03966     // Length and number of words of that length
03967     4, 28,
03968     // Coordinates where words start and direction (0 = horizontal)
03969     0,0,0, 0,0,1, 0,1,0, 0,2,0, 0,6,0, 0,9,1, 0,10,0, 0,11,0, 0,12,0, 1,0,1, 1,9,1, 2,0,1, 2,9,1, 6,0,1, 6,9,1, 9,0,0, 9,1,0, 9,2,0, 9,6,0, 9,10,0, 9,11,0, 9,12,0, 10,0,1, 10,9,1, 11,0,1, 11,9,1, 12,0,1, 12,9,1, 
03970     // Length and number of words of that length
03971     3, 20,
03972     // Coordinates where words start and direction (0 = horizontal)
03973     0,5,1, 1,5,1, 2,5,1, 3,4,0, 3,8,0, 4,3,1, 4,7,1, 5,0,0, 5,1,0, 5,2,0, 5,10,0, 5,11,0, 5,12,0, 7,4,0, 7,8,0, 8,3,1, 8,7,1, 10,5,1, 11,5,1, 12,5,1, 
03974     // End marker
03975     0
03976   };
03977 
03978 
03979   const int* grids[] = {
03980     &g0[0], &g1[0], &g2[0], &g3[0], &g4[0], &g5[0], &g6[0], &g7[0], &g8[0], 
03981     &g9[0], &g10[0], &g11[0], &g12[0], &g13[0], &g14[0], &g15[0], &g16[0], 
03982     &g17[0], &g18[0], &g19[0], &g20[0], &g21[0], &g22[0], &g23[0], &g24[0], 
03983     &g25[0], &g26[0], &g27[0], &g28[0], &g29[0], &g30[0], &g31[0], &g32[0], 
03984     &g33[0], &g34[0], &g35[0], &g36[0], &g37[0], &g38[0], &g39[0], &g40[0], 
03985     &g41[0], &g42[0], &g43[0], &g44[0], &g45[0], &g46[0], &g47[0], &g48[0], 
03986     &g49[0], &g50[0], &g51[0], &g52[0], &g53[0], &g54[0], &g55[0], &g56[0],
03987     &g57[0], &g58[0], &g59[0], &g60[0], &g61[0], &g62[0], &g63[0], &g64[0],
03988     &g65[0], &g66[0], &g67[0], &g68[0], &g69[0], &g70[0], &g71[0]
03989   };
03990 
03991   const unsigned int n_grids = 72;
03992 
03993 }
03994 
03995 // STATISTICS: example-any