Generated on Tue Apr 18 10:21:29 2017 for Gecode by doxygen 1.6.3

crossword.cpp

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