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