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