Generated on Mon Nov 30 23:53:17 2009 for Gecode by doxygen 1.6.1

crossword.cpp

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