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