Generated on Tue May 22 09:39:37 2018 for Gecode by doxygen 1.6.3

crossword.cpp

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