Generated on Thu Mar 22 10:39:31 2012 for Gecode by doxygen 1.6.3

crossword.cpp

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