Generated on Thu Apr 5 2018 19:44:19 for Gecode by doxygen 1.8.13
crossword.cpp
Go to the documentation of this file.
1 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2 /*
3  * Main authors:
4  * Christian Schulte <schulte@gecode.org>
5  *
6  * Copyright:
7  * Christian Schulte, 2009
8  *
9  * Last modified:
10  * $Date$ by $Author$
11  * $Revision$
12  *
13  * This file is part of Gecode, the generic constraint
14  * development environment:
15  * http://www.gecode.org
16  *
17  * Permission is hereby granted, free of charge, to any person obtaining
18  * a copy of this software and associated documentation files (the
19  * "Software"), to deal in the Software without restriction, including
20  * without limitation the rights to use, copy, modify, merge, publish,
21  * distribute, sublicense, and/or sell copies of the Software, and to
22  * permit persons to whom the Software is furnished to do so, subject to
23  * the following conditions:
24  *
25  * The above copyright notice and this permission notice shall be
26  * included in all copies or substantial portions of the Software.
27  *
28  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35  *
36  */
37 
38 #include <gecode/driver.hh>
39 
40 #include <gecode/int.hh>
41 #include <gecode/minimodel.hh>
42 
43 #include "examples/scowl.hpp"
44 
45 using namespace Gecode;
46 
47 
48 // Grid data
49 namespace {
50  // Grid data
51  extern const int* grids[];
52  // Number of grids
53  extern const unsigned int n_grids;
54 }
55 
56 
70 class Crossword : public Script {
71 protected:
73  const int w;
75  const int h;
78 public:
80  enum {
82  MODEL_TUPLESET
83  };
85  enum {
94  BRANCH_LETTERS_CHB_ALL
95  };
98  : Script(opt),
99  w(grids[opt.size()][0]), h(grids[opt.size()][1]),
100  letters(*this,w*h,'a','z') {
101  // Pointer into the grid specification (width and height already skipped)
102  const int* g = &grids[opt.size()][2];
103 
104  // Matrix for letters
105  Matrix<IntVarArray> ml(letters, w, h);
106 
107  // Set black fields to 0
108  {
109  IntVar z(*this,0,0);
110  for (int n = *g++; n--; ) {
111  int x=*g++, y=*g++;
112  ml(x,y)=z;
113  }
114  }
115 
116  // Array of all words
117  IntVarArgs allwords;
118 
119  switch (opt.model()) {
120  case MODEL_ELEMENT:
121  // While words of length w_l to process
122  while (int w_l=*g++) {
123  // Number of words of that length in the dictionary
124  int n_w = dict.words(w_l);
125  // Number of words of that length in the puzzle
126  int n=*g++;
127 
128  if (n > n_w) {
129  fail();
130  } else {
131  // Array of all words of length w_l
132  IntVarArgs words(*this,n,0,n_w-1);
133  allwords << words;
134 
135  // All words of same length must be different
136  distinct(*this, words, opt.ipl());
137 
138  for (int d=0; d<w_l; d++) {
139  // Array that maps words to a letter at a certain position (shared among all element constraints)
140  IntSharedArray w2l(n_w);
141  // Initialize word to letter map
142  for (int i=n_w; i--; )
143  w2l[i] = dict.word(w_l,i)[d];
144  // Link word to letter variable
145  for (int i=0; i<n; i++) {
146  // Get (x,y) coordinate where word begins
147  int x=g[3*i+0], y=g[3*i+1];
148  // Whether word is horizontal
149  bool h=(g[3*i+2] == 0);
150  // Constrain the letters to the words' letters
151  element(*this, w2l, words[i], h ? ml(x+d,y) : ml(x,y+d));
152  }
153  }
154  // Skip word coordinates
155  g += 3*n;
156  }
157  }
158  break;
159  case MODEL_TUPLESET:
160  // While words of length w_l to process
161  while (int w_l=*g++) {
162  // Number of words of that length in the dictionary
163  int n_w = dict.words(w_l);
164  // Number of words of that length in the puzzle
165  int n=*g++;
166 
167  if (n > n_w) {
168  fail();
169  } else {
170  // Setup tuple-set
171  TupleSet ts(w_l+1);
172  IntArgs w(w_l+1);
173  for (int i=0; i<n_w; i++) {
174  for (int d=0; d<w_l; d++)
175  w[d] = dict.word(w_l,i)[d];
176  w[w_l]=i;
177  ts.add(w);
178  }
179  ts.finalize();
180 
181  // Array of all words of length w_l
182  IntVarArgs words(*this,n,0,n_w-1);
183  allwords << words;
184 
185  // All words of same length must be different
186  distinct(*this, words, opt.ipl());
187 
188  // Constraint all words in puzzle
189  for (int i=0; i<n; i++) {
190  // Get (x,y) coordinate where word begins
191  int x=*g++, y=*g++;
192  // Whether word is horizontal
193  bool h=(*g++ == 0);
194  // Letters in word plus word number
195  IntVarArgs w(w_l+1); w[w_l]=words[i];
196  if (h)
197  for (int d=0; d<w_l; d++)
198  w[d] = ml(x+d,y);
199  else
200  for (int d=0; d<w_l; d++)
201  w[d] = ml(x,y+d);
202  // Constrain word
203  extensional(*this, w, ts);
204  }
205  }
206  }
207  break;
208  }
209  switch (opt.branching()) {
210  case BRANCH_WORDS_AFC:
211  // Branch by assigning words
212  branch(*this, allwords,
214  nullptr, &printwords);
215  break;
216  case BRANCH_LETTERS_AFC:
217  // Branch by assigning letters
218  branch(*this, letters,
220  nullptr, &printletters);
221  break;
222  case BRANCH_LETTERS_AFC_ALL:
223  // Branch by assigning letters (try all letters)
224  branch(*this, letters,
226  nullptr, &printletters);
227  break;
228  case BRANCH_WORDS_ACTION:
229  // Branch by assigning words
230  branch(*this, allwords,
232  nullptr, &printwords);
233  break;
234  case BRANCH_LETTERS_ACTION:
235  // Branch by assigning letters
236  branch(*this, letters,
238  nullptr, &printletters);
239  break;
240  case BRANCH_LETTERS_ACTION_ALL:
241  // Branch by assigning letters (try all letters)
242  branch(*this, letters,
244  nullptr, &printletters);
245  break;
246  case BRANCH_WORDS_CHB:
247  // Branch by assigning words
248  branch(*this, allwords,
250  nullptr, &printwords);
251  break;
252  case BRANCH_LETTERS_CHB:
253  // Branch by assigning letters
254  branch(*this, letters,
256  nullptr, &printletters);
257  break;
258  case BRANCH_LETTERS_CHB_ALL:
259  // Branch by assigning letters (try all letters)
260  branch(*this, letters,
262  nullptr, &printletters);
263  break;
264  }
265  }
267  static void printletters(const Space& home, const Brancher&,
268  unsigned int a,
269  IntVar, int i, const int& n,
270  std::ostream& os) {
271  const Crossword& c = static_cast<const Crossword&>(home);
272  int x = i % c.w, y = i / c.w;
273  os << "letters[" << x << "," << y << "] "
274  << ((a == 0) ? "=" : "!=") << " "
275  << static_cast<char>(n);
276  }
278  static void printwords(const Space&, const Brancher&,
279  unsigned int a,
280  IntVar, int i, const int& n,
281  std::ostream& os) {
282  os << "allwords[" << i << "] "
283  << ((a == 0) ? "<=" : ">") << " "
284  << n;
285  }
287  bool master(const MetaInfo& mi) {
288  if (mi.type() == MetaInfo::RESTART)
289  // Post no-goods
290  mi.nogoods().post(*this);
291  // Do not perform a restart if a solution has been found
292  return false;
293  }
294 
297  : Script(s), w(s.w), h(s.h) {
298  letters.update(*this, s.letters);
299  }
301  virtual Space*
302  copy(void) {
303  return new Crossword(*this);
304  }
306  virtual void
307  print(std::ostream& os) const {
308  // Matrix for letters
309  Matrix<IntVarArray> ml(letters, w, h);
310  for (int i=0; i<h; i++) {
311  os << '\t';
312  for (int j=0; j<w; j++)
313  if (ml(j,i).assigned())
314  if (ml(j,i).val() == 0)
315  os << '*';
316  else
317  os << static_cast<char>(ml(j,i).val());
318  else
319  os << '?';
320  os << std::endl;
321  }
322  os << std::endl << std::endl;
323  }
324 };
325 
326 
330 int
331 main(int argc, char* argv[]) {
332  FileSizeOptions opt("Crossword");
333  opt.size(10);
334  opt.ipl(IPL_VAL);
336  opt.model(Crossword::MODEL_ELEMENT,"element");
337  opt.model(Crossword::MODEL_TUPLESET,"tuple-set");
340  "words-afc");
342  "letters-afc");
344  "letters-afc-all");
346  "words-action");
348  "letters-action");
350  "letters-action-all");
352  "words-chb");
354  "letters-chb");
356  "letters-chb-all");
357  opt.parse(argc,argv);
358  dict.init(opt.file());
359  if (opt.size() >= n_grids) {
360  std::cerr << "Error: size must be between 0 and "
361  << n_grids-1 << std::endl;
362  return 1;
363  }
364  Script::run<Crossword,DFS,SizeOptions>(opt);
365  return 0;
366 }
367 
368 namespace {
369 
370  /*
371  * The Grid data has been provided by Peter Van Beek, to
372  * quote the original README.txt:
373  *
374  * The files in this directory contain templates for crossword
375  * puzzles. Each is a two-dimensional array. A _ indicates
376  * that the associated square in the crossword template is
377  * blank, and a * indicates that it is a black square that
378  * does not need to have a letter inserted.
379  *
380  * The crossword puzzles templates came from the following
381  * sources:
382  *
383  * 15.01, ..., 15.10
384  * 19.01, ..., 19.10
385  * 21.01, ..., 21.10
386  * 23.01, ..., 23.10
387  *
388  * Herald Tribune Crosswords, Spring, 1999
389  *
390  * 05.01, ..., 05.10
391  *
392  * All legal 5 x 5 puzzles.
393  *
394  * puzzle01, ..., puzzle19
395  *
396  * Ginsberg, M.L., "Dynamic Backtracking,"
397  * Journal of Artificial Intelligence Researc (JAIR)
398  * Volume 1, pages 25-46, 1993.
399  *
400  * puzzle20, ..., puzzle22
401  *
402  * Ginsberg, M.L. et al., "Search Lessons Learned
403  * from Crossword Puzzles," AAAI-90, pages 210-215.
404  *
405  */
406 
407  /*
408  * Name: 05.01, 5 x 5
409  * (_ _ _ _ _)
410  * (_ _ _ _ _)
411  * (_ _ _ _ _)
412  * (_ _ _ _ _)
413  * (_ _ _ _ _)
414  */
415  const int g0[] = {
416  // Width and height of crossword grid
417  5, 5,
418  // Number of black fields
419  0,
420  // Black field coordinates
421 
422  // Length and number of words of that length
423  5, 10,
424  // Coordinates where words start and direction (0 = horizontal)
425  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,
426  // End marker
427  0
428  };
429 
430 
431  /*
432  * Name: 05.02, 5 x 5
433  * (_ _ _ _ *)
434  * (_ _ _ _ _)
435  * (_ _ _ _ _)
436  * (_ _ _ _ _)
437  * (* _ _ _ _)
438  */
439  const int g1[] = {
440  // Width and height of crossword grid
441  5, 5,
442  // Number of black fields
443  2,
444  // Black field coordinates
445  0,4, 4,0,
446  // Length and number of words of that length
447  5, 6,
448  // Coordinates where words start and direction (0 = horizontal)
449  0,1,0, 0,2,0, 0,3,0, 1,0,1, 2,0,1, 3,0,1,
450  // Length and number of words of that length
451  4, 4,
452  // Coordinates where words start and direction (0 = horizontal)
453  0,0,0, 0,0,1, 1,4,0, 4,1,1,
454  // End marker
455  0
456  };
457 
458 
459  /*
460  * Name: 05.03, 5 x 5
461  * (_ _ _ _ *)
462  * (_ _ _ _ *)
463  * (_ _ _ _ _)
464  * (* _ _ _ _)
465  * (* _ _ _ _)
466  */
467  const int g2[] = {
468  // Width and height of crossword grid
469  5, 5,
470  // Number of black fields
471  4,
472  // Black field coordinates
473  0,3, 0,4, 4,0, 4,1,
474  // Length and number of words of that length
475  5, 4,
476  // Coordinates where words start and direction (0 = horizontal)
477  0,2,0, 1,0,1, 2,0,1, 3,0,1,
478  // Length and number of words of that length
479  4, 4,
480  // Coordinates where words start and direction (0 = horizontal)
481  0,0,0, 0,1,0, 1,3,0, 1,4,0,
482  // Length and number of words of that length
483  3, 2,
484  // Coordinates where words start and direction (0 = horizontal)
485  0,0,1, 4,2,1,
486  // End marker
487  0
488  };
489 
490 
491  /*
492  * Name: 05.04, 5 x 5
493  * (_ _ _ * *)
494  * (_ _ _ _ *)
495  * (_ _ _ _ _)
496  * (* _ _ _ _)
497  * (* * _ _ _)
498  */
499  const int g3[] = {
500  // Width and height of crossword grid
501  5, 5,
502  // Number of black fields
503  6,
504  // Black field coordinates
505  0,3, 0,4, 1,4, 3,0, 4,0, 4,1,
506  // Length and number of words of that length
507  5, 2,
508  // Coordinates where words start and direction (0 = horizontal)
509  0,2,0, 2,0,1,
510  // Length and number of words of that length
511  4, 4,
512  // Coordinates where words start and direction (0 = horizontal)
513  0,1,0, 1,0,1, 1,3,0, 3,1,1,
514  // Length and number of words of that length
515  3, 4,
516  // Coordinates where words start and direction (0 = horizontal)
517  0,0,0, 0,0,1, 2,4,0, 4,2,1,
518  // End marker
519  0
520  };
521 
522 
523  /*
524  * Name: 05.05, 5 x 5
525  * (_ _ _ * *)
526  * (_ _ _ * *)
527  * (_ _ _ _ _)
528  * (* * _ _ _)
529  * (* * _ _ _)
530  */
531  const int g4[] = {
532  // Width and height of crossword grid
533  5, 5,
534  // Number of black fields
535  8,
536  // Black field coordinates
537  0,3, 0,4, 1,3, 1,4, 3,0, 3,1, 4,0, 4,1,
538  // Length and number of words of that length
539  5, 2,
540  // Coordinates where words start and direction (0 = horizontal)
541  0,2,0, 2,0,1,
542  // Length and number of words of that length
543  3, 8,
544  // Coordinates where words start and direction (0 = horizontal)
545  0,0,0, 0,0,1, 0,1,0, 1,0,1, 2,3,0, 2,4,0, 3,2,1, 4,2,1,
546  // End marker
547  0
548  };
549 
550 
551  /*
552  * Name: 05.06, 5 x 5
553  * (* _ _ _ _)
554  * (_ _ _ _ _)
555  * (_ _ _ _ _)
556  * (_ _ _ _ _)
557  * (_ _ _ _ *)
558  */
559  const int g5[] = {
560  // Width and height of crossword grid
561  5, 5,
562  // Number of black fields
563  2,
564  // Black field coordinates
565  0,0, 4,4,
566  // Length and number of words of that length
567  5, 6,
568  // Coordinates where words start and direction (0 = horizontal)
569  0,1,0, 0,2,0, 0,3,0, 1,0,1, 2,0,1, 3,0,1,
570  // Length and number of words of that length
571  4, 4,
572  // Coordinates where words start and direction (0 = horizontal)
573  0,1,1, 0,4,0, 1,0,0, 4,0,1,
574  // End marker
575  0
576  };
577 
578 
579  /*
580  * Name: 05.07, 5 x 5
581  * (* _ _ _ _)
582  * (* _ _ _ _)
583  * (_ _ _ _ _)
584  * (_ _ _ _ *)
585  * (_ _ _ _ *)
586  */
587  const int g6[] = {
588  // Width and height of crossword grid
589  5, 5,
590  // Number of black fields
591  4,
592  // Black field coordinates
593  0,0, 0,1, 4,3, 4,4,
594  // Length and number of words of that length
595  5, 4,
596  // Coordinates where words start and direction (0 = horizontal)
597  0,2,0, 1,0,1, 2,0,1, 3,0,1,
598  // Length and number of words of that length
599  4, 4,
600  // Coordinates where words start and direction (0 = horizontal)
601  0,3,0, 0,4,0, 1,0,0, 1,1,0,
602  // Length and number of words of that length
603  3, 2,
604  // Coordinates where words start and direction (0 = horizontal)
605  0,2,1, 4,0,1,
606  // End marker
607  0
608  };
609 
610 
611  /*
612  * Name: 05.08, 5 x 5
613  * (* _ _ _ *)
614  * (_ _ _ _ _)
615  * (_ _ _ _ _)
616  * (_ _ _ _ _)
617  * (* _ _ _ *)
618  */
619  const int g7[] = {
620  // Width and height of crossword grid
621  5, 5,
622  // Number of black fields
623  4,
624  // Black field coordinates
625  0,0, 0,4, 4,0, 4,4,
626  // Length and number of words of that length
627  5, 6,
628  // Coordinates where words start and direction (0 = horizontal)
629  0,1,0, 0,2,0, 0,3,0, 1,0,1, 2,0,1, 3,0,1,
630  // Length and number of words of that length
631  3, 4,
632  // Coordinates where words start and direction (0 = horizontal)
633  0,1,1, 1,0,0, 1,4,0, 4,1,1,
634  // End marker
635  0
636  };
637 
638 
639  /*
640  * Name: 05.09, 5 x 5
641  * (* * _ _ _)
642  * (* _ _ _ _)
643  * (_ _ _ _ _)
644  * (_ _ _ _ *)
645  * (_ _ _ * *)
646  */
647  const int g8[] = {
648  // Width and height of crossword grid
649  5, 5,
650  // Number of black fields
651  6,
652  // Black field coordinates
653  0,0, 0,1, 1,0, 3,4, 4,3, 4,4,
654  // Length and number of words of that length
655  5, 2,
656  // Coordinates where words start and direction (0 = horizontal)
657  0,2,0, 2,0,1,
658  // Length and number of words of that length
659  4, 4,
660  // Coordinates where words start and direction (0 = horizontal)
661  0,3,0, 1,1,0, 1,1,1, 3,0,1,
662  // Length and number of words of that length
663  3, 4,
664  // Coordinates where words start and direction (0 = horizontal)
665  0,2,1, 0,4,0, 2,0,0, 4,0,1,
666  // End marker
667  0
668  };
669 
670 
671  /*
672  * Name: 05.10, 5 x 5
673  * (* * _ _ _)
674  * (* * _ _ _)
675  * (_ _ _ _ _)
676  * (_ _ _ * *)
677  * (_ _ _ * *)
678  */
679  const int g9[] = {
680  // Width and height of crossword grid
681  5, 5,
682  // Number of black fields
683  8,
684  // Black field coordinates
685  0,0, 0,1, 1,0, 1,1, 3,3, 3,4, 4,3, 4,4,
686  // Length and number of words of that length
687  5, 2,
688  // Coordinates where words start and direction (0 = horizontal)
689  0,2,0, 2,0,1,
690  // Length and number of words of that length
691  3, 8,
692  // Coordinates where words start and direction (0 = horizontal)
693  0,2,1, 0,3,0, 0,4,0, 1,2,1, 2,0,0, 2,1,0, 3,0,1, 4,0,1,
694  // End marker
695  0
696  };
697 
698 
699  /*
700  * Name: 15.01, 15 x 15
701  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
702  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
703  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
704  * (_ _ _ _ _ _ _ * * _ _ _ _ _ _)
705  * (* * * _ _ _ * _ _ _ _ _ _ * *)
706  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
707  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _)
708  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _)
709  * (_ _ _ _ * _ _ _ _ _ _ * _ _ _)
710  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
711  * (* * _ _ _ _ _ _ * _ _ _ * * *)
712  * (_ _ _ _ _ _ * * _ _ _ _ _ _ _)
713  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
714  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
715  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
716  */
717  const int g10[] = {
718  // Width and height of crossword grid
719  15, 15,
720  // Number of black fields
721  36,
722  // Black field coordinates
723  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,
724  // Length and number of words of that length
725  10, 4,
726  // Coordinates where words start and direction (0 = horizontal)
727  0,2,0, 2,5,1, 5,12,0, 12,0,1,
728  // Length and number of words of that length
729  7, 6,
730  // Coordinates where words start and direction (0 = horizontal)
731  0,3,0, 3,8,1, 4,7,0, 7,4,1, 8,11,0, 11,0,1,
732  // Length and number of words of that length
733  6, 12,
734  // Coordinates where words start and direction (0 = horizontal)
735  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,
736  // Length and number of words of that length
737  5, 16,
738  // Coordinates where words start and direction (0 = horizontal)
739  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,
740  // Length and number of words of that length
741  4, 24,
742  // Coordinates where words start and direction (0 = horizontal)
743  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,
744  // Length and number of words of that length
745  3, 16,
746  // Coordinates where words start and direction (0 = horizontal)
747  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,
748  // End marker
749  0
750  };
751 
752 
753  /*
754  * Name: 15.02, 15 x 15
755  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
756  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
757  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
758  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
759  * (_ _ _ * _ _ _ _ * _ _ _ * * *)
760  * (* * * _ _ _ _ * _ _ _ * _ _ _)
761  * (_ _ _ _ _ _ * _ _ _ * _ _ _ _)
762  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
763  * (_ _ _ _ * _ _ _ * _ _ _ _ _ _)
764  * (_ _ _ * _ _ _ * _ _ _ _ * * *)
765  * (* * * _ _ _ * _ _ _ _ * _ _ _)
766  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
767  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
768  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
769  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
770  */
771  const int g11[] = {
772  // Width and height of crossword grid
773  15, 15,
774  // Number of black fields
775  34,
776  // Black field coordinates
777  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,
778  // Length and number of words of that length
779  15, 2,
780  // Coordinates where words start and direction (0 = horizontal)
781  0,2,0, 0,12,0,
782  // Length and number of words of that length
783  10, 4,
784  // Coordinates where words start and direction (0 = horizontal)
785  0,1,0, 0,11,0, 5,3,0, 5,13,0,
786  // Length and number of words of that length
787  7, 2,
788  // Coordinates where words start and direction (0 = horizontal)
789  5,8,1, 9,0,1,
790  // Length and number of words of that length
791  6, 6,
792  // Coordinates where words start and direction (0 = horizontal)
793  0,6,0, 5,1,1, 6,0,1, 8,9,1, 9,8,0, 9,8,1,
794  // Length and number of words of that length
795  5, 14,
796  // Coordinates where words start and direction (0 = horizontal)
797  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,
798  // Length and number of words of that length
799  4, 36,
800  // Coordinates where words start and direction (0 = horizontal)
801  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,
802  // Length and number of words of that length
803  3, 16,
804  // Coordinates where words start and direction (0 = horizontal)
805  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,
806  // End marker
807  0
808  };
809 
810 
811  /*
812  * Name: 15.03, 15 x 15
813  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
814  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
815  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
816  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ _)
817  * (* * * _ _ _ _ * _ _ _ _ * * *)
818  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ _)
819  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _)
820  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
821  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _)
822  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ _)
823  * (* * * _ _ _ _ * _ _ _ _ * * *)
824  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ _)
825  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
826  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
827  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
828  */
829  const int g12[] = {
830  // Width and height of crossword grid
831  15, 15,
832  // Number of black fields
833  36,
834  // Black field coordinates
835  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,
836  // Length and number of words of that length
837  8, 8,
838  // Coordinates where words start and direction (0 = horizontal)
839  0,3,0, 0,9,0, 3,0,1, 5,7,1, 7,5,0, 7,11,0, 9,0,1, 11,7,1,
840  // Length and number of words of that length
841  6, 8,
842  // Coordinates where words start and direction (0 = horizontal)
843  0,5,0, 0,11,0, 3,9,1, 5,0,1, 9,3,0, 9,9,0, 9,9,1, 11,0,1,
844  // Length and number of words of that length
845  5, 22,
846  // Coordinates where words start and direction (0 = horizontal)
847  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,
848  // Length and number of words of that length
849  4, 36,
850  // Coordinates where words start and direction (0 = horizontal)
851  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,
852  // Length and number of words of that length
853  3, 4,
854  // Coordinates where words start and direction (0 = horizontal)
855  0,8,0, 6,12,1, 8,0,1, 12,6,0,
856  // End marker
857  0
858  };
859 
860 
861  /*
862  * Name: 15.04, 15 x 15
863  * (_ _ _ * _ _ _ _ * _ _ _ _ _ _)
864  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ _)
865  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
866  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _)
867  * (* * * _ _ _ * _ _ _ _ _ * * *)
868  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _)
869  * (_ _ _ _ * _ _ _ * _ _ _ _ _ _)
870  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
871  * (_ _ _ _ _ _ * _ _ _ * _ _ _ _)
872  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _)
873  * (* * * _ _ _ _ _ * _ _ _ * * *)
874  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _)
875  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
876  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ _)
877  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _)
878  */
879  const int g13[] = {
880  // Width and height of crossword grid
881  15, 15,
882  // Number of black fields
883  32,
884  // Black field coordinates
885  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,
886  // Length and number of words of that length
887  15, 4,
888  // Coordinates where words start and direction (0 = horizontal)
889  0,2,0, 0,7,0, 0,12,0, 7,0,1,
890  // Length and number of words of that length
891  8, 4,
892  // Coordinates where words start and direction (0 = horizontal)
893  0,1,0, 4,7,1, 7,13,0, 10,0,1,
894  // Length and number of words of that length
895  6, 8,
896  // Coordinates where words start and direction (0 = horizontal)
897  0,8,0, 0,13,0, 0,14,0, 4,0,1, 9,0,0, 9,1,0, 9,6,0, 10,9,1,
898  // Length and number of words of that length
899  5, 22,
900  // Coordinates where words start and direction (0 = horizontal)
901  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,
902  // Length and number of words of that length
903  4, 22,
904  // Coordinates where words start and direction (0 = horizontal)
905  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,
906  // Length and number of words of that length
907  3, 16,
908  // Coordinates where words start and direction (0 = horizontal)
909  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,
910  // End marker
911  0
912  };
913 
914 
915  /*
916  * Name: 15.05, 15 x 15
917  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
918  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
919  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
920  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
921  * (* * * * _ _ _ * * * _ _ _ _ _)
922  * (_ _ _ _ _ _ * _ _ _ _ * * * *)
923  * (_ _ _ _ _ * * _ _ _ _ _ _ _ *)
924  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
925  * (* _ _ _ _ _ _ _ * * _ _ _ _ _)
926  * (* * * * _ _ _ _ * _ _ _ _ _ _)
927  * (_ _ _ _ _ * * * _ _ _ * * * *)
928  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
929  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
930  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
931  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
932  */
933  const int g14[] = {
934  // Width and height of crossword grid
935  15, 15,
936  // Number of black fields
937  44,
938  // Black field coordinates
939  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,
940  // Length and number of words of that length
941  15, 1,
942  // Coordinates where words start and direction (0 = horizontal)
943  0,7,0,
944  // Length and number of words of that length
945  10, 2,
946  // Coordinates where words start and direction (0 = horizontal)
947  0,2,0, 5,12,0,
948  // Length and number of words of that length
949  7, 4,
950  // Coordinates where words start and direction (0 = horizontal)
951  1,8,0, 4,4,1, 7,6,0, 10,4,1,
952  // Length and number of words of that length
953  6, 2,
954  // Coordinates where words start and direction (0 = horizontal)
955  0,5,0, 9,9,0,
956  // Length and number of words of that length
957  5, 21,
958  // Coordinates where words start and direction (0 = horizontal)
959  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,
960  // Length and number of words of that length
961  4, 38,
962  // Coordinates where words start and direction (0 = horizontal)
963  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,
964  // Length and number of words of that length
965  3, 10,
966  // Coordinates where words start and direction (0 = horizontal)
967  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,
968  // End marker
969  0
970  };
971 
972 
973  /*
974  * Name: 15.06, 15 x 15
975  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
976  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
977  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
978  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
979  * (* * * _ _ _ * _ _ _ _ _ * * *)
980  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ _)
981  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ _)
982  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _)
983  * (_ _ _ _ _ * _ _ _ _ _ _ _ _ _)
984  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ _)
985  * (* * * _ _ _ _ _ * _ _ _ * * *)
986  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
987  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
988  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
989  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
990  */
991  const int g15[] = {
992  // Width and height of crossword grid
993  15, 15,
994  // Number of black fields
995  30,
996  // Black field coordinates
997  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,
998  // Length and number of words of that length
999  9, 3,
1000  // Coordinates where words start and direction (0 = horizontal)
1001  0,6,0, 6,8,0, 7,3,1,
1002  // Length and number of words of that length
1003  8, 4,
1004  // Coordinates where words start and direction (0 = horizontal)
1005  0,5,0, 5,0,1, 7,9,0, 9,7,1,
1006  // Length and number of words of that length
1007  7, 19,
1008  // Coordinates where words start and direction (0 = horizontal)
1009  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,
1010  // Length and number of words of that length
1011  6, 4,
1012  // Coordinates where words start and direction (0 = horizontal)
1013  0,9,0, 5,9,1, 9,0,1, 9,5,0,
1014  // Length and number of words of that length
1015  5, 14,
1016  // Coordinates where words start and direction (0 = horizontal)
1017  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,
1018  // Length and number of words of that length
1019  4, 20,
1020  // Coordinates where words start and direction (0 = horizontal)
1021  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,
1022  // Length and number of words of that length
1023  3, 8,
1024  // Coordinates where words start and direction (0 = horizontal)
1025  0,7,0, 3,4,0, 4,0,1, 4,12,1, 9,10,0, 10,0,1, 10,12,1, 12,7,0,
1026  // End marker
1027  0
1028  };
1029 
1030 
1031  /*
1032  * Name: 15.07, 15 x 15
1033  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
1034  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
1035  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ _)
1036  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
1037  * (* * _ _ _ _ * _ _ _ * _ _ _ _)
1038  * (_ _ _ _ _ * _ _ _ _ _ _ * * *)
1039  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
1040  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _)
1041  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
1042  * (* * * _ _ _ _ _ _ * _ _ _ _ _)
1043  * (_ _ _ _ * _ _ _ * _ _ _ _ * *)
1044  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
1045  * (_ _ _ _ _ * _ _ _ _ _ _ _ _ _)
1046  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
1047  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
1048  */
1049  const int g16[] = {
1050  // Width and height of crossword grid
1051  15, 15,
1052  // Number of black fields
1053  32,
1054  // Black field coordinates
1055  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,
1056  // Length and number of words of that length
1057  10, 4,
1058  // Coordinates where words start and direction (0 = horizontal)
1059  0,8,0, 5,6,0, 6,5,1, 8,0,1,
1060  // Length and number of words of that length
1061  9, 4,
1062  // Coordinates where words start and direction (0 = horizontal)
1063  0,2,0, 2,0,1, 6,12,0, 12,6,1,
1064  // Length and number of words of that length
1065  7, 10,
1066  // Coordinates where words start and direction (0 = horizontal)
1067  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,
1068  // Length and number of words of that length
1069  6, 4,
1070  // Coordinates where words start and direction (0 = horizontal)
1071  3,9,0, 5,6,1, 6,5,0, 9,3,1,
1072  // Length and number of words of that length
1073  5, 16,
1074  // Coordinates where words start and direction (0 = horizontal)
1075  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,
1076  // Length and number of words of that length
1077  4, 28,
1078  // Coordinates where words start and direction (0 = horizontal)
1079  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,
1080  // Length and number of words of that length
1081  3, 8,
1082  // Coordinates where words start and direction (0 = horizontal)
1083  0,7,0, 4,7,1, 5,10,0, 7,0,1, 7,4,0, 7,12,1, 10,5,1, 12,7,0,
1084  // End marker
1085  0
1086  };
1087 
1088 
1089  /*
1090  * Name: 15.08, 15 x 15
1091  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
1092  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
1093  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _)
1094  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _)
1095  * (* * * _ _ _ * _ _ _ * _ _ _ _)
1096  * (_ _ _ * _ _ _ _ _ _ _ _ * * *)
1097  * (_ _ _ _ * _ _ _ * _ _ _ _ _ _)
1098  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
1099  * (_ _ _ _ _ _ * _ _ _ * _ _ _ _)
1100  * (* * * _ _ _ _ _ _ _ _ * _ _ _)
1101  * (_ _ _ _ * _ _ _ * _ _ _ * * *)
1102  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _)
1103  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
1104  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
1105  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _)
1106  */
1107  const int g17[] = {
1108  // Width and height of crossword grid
1109  15, 15,
1110  // Number of black fields
1111  39,
1112  // Black field coordinates
1113  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,
1114  // Length and number of words of that length
1115  8, 4,
1116  // Coordinates where words start and direction (0 = horizontal)
1117  3,9,0, 4,5,0, 5,4,1, 9,3,1,
1118  // Length and number of words of that length
1119  7, 4,
1120  // Coordinates where words start and direction (0 = horizontal)
1121  0,7,0, 7,0,1, 7,8,1, 8,7,0,
1122  // Length and number of words of that length
1123  6, 4,
1124  // Coordinates where words start and direction (0 = horizontal)
1125  0,8,0, 6,9,1, 8,0,1, 9,6,0,
1126  // Length and number of words of that length
1127  5, 20,
1128  // Coordinates where words start and direction (0 = horizontal)
1129  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,
1130  // Length and number of words of that length
1131  4, 32,
1132  // Coordinates where words start and direction (0 = horizontal)
1133  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,
1134  // Length and number of words of that length
1135  3, 20,
1136  // Coordinates where words start and direction (0 = horizontal)
1137  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,
1138  // End marker
1139  0
1140  };
1141 
1142 
1143  /*
1144  * Name: 15.09, 15 x 15
1145  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1146  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1147  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1148  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
1149  * (* * * _ _ _ * _ _ _ _ _ * * *)
1150  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
1151  * (_ _ _ _ * _ _ _ * _ _ _ _ _ _)
1152  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _)
1153  * (_ _ _ _ _ _ * _ _ _ * _ _ _ _)
1154  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
1155  * (* * * _ _ _ _ _ * _ _ _ * * *)
1156  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
1157  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1158  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1159  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1160  */
1161  const int g18[] = {
1162  // Width and height of crossword grid
1163  15, 15,
1164  // Number of black fields
1165  38,
1166  // Black field coordinates
1167  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,
1168  // Length and number of words of that length
1169  7, 10,
1170  // Coordinates where words start and direction (0 = horizontal)
1171  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,
1172  // Length and number of words of that length
1173  6, 4,
1174  // Coordinates where words start and direction (0 = horizontal)
1175  0,8,0, 6,9,1, 8,0,1, 9,6,0,
1176  // Length and number of words of that length
1177  5, 24,
1178  // Coordinates where words start and direction (0 = horizontal)
1179  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,
1180  // Length and number of words of that length
1181  4, 28,
1182  // Coordinates where words start and direction (0 = horizontal)
1183  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,
1184  // Length and number of words of that length
1185  3, 16,
1186  // Coordinates where words start and direction (0 = horizontal)
1187  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,
1188  // End marker
1189  0
1190  };
1191 
1192 
1193  /*
1194  * Name: 15.10, 15 x 15
1195  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1196  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1197  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
1198  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
1199  * (* * * * _ _ _ _ * _ _ _ _ _ _)
1200  * (_ _ _ _ _ * * _ _ _ _ _ * * *)
1201  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
1202  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
1203  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
1204  * (* * * _ _ _ _ _ * * _ _ _ _ _)
1205  * (_ _ _ _ _ _ * _ _ _ _ * * * *)
1206  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
1207  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
1208  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1209  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
1210  */
1211  const int g19[] = {
1212  // Width and height of crossword grid
1213  15, 15,
1214  // Number of black fields
1215  35,
1216  // Black field coordinates
1217  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,
1218  // Length and number of words of that length
1219  10, 8,
1220  // Coordinates where words start and direction (0 = horizontal)
1221  0,2,0, 0,3,0, 0,8,0, 3,5,1, 5,6,0, 5,11,0, 5,12,0, 11,0,1,
1222  // Length and number of words of that length
1223  9, 2,
1224  // Coordinates where words start and direction (0 = horizontal)
1225  5,6,1, 9,0,1,
1226  // Length and number of words of that length
1227  7, 4,
1228  // Coordinates where words start and direction (0 = horizontal)
1229  0,7,0, 7,0,1, 7,8,1, 8,7,0,
1230  // Length and number of words of that length
1231  6, 2,
1232  // Coordinates where words start and direction (0 = horizontal)
1233  0,10,0, 9,4,0,
1234  // Length and number of words of that length
1235  5, 18,
1236  // Coordinates where words start and direction (0 = horizontal)
1237  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,
1238  // Length and number of words of that length
1239  4, 38,
1240  // Coordinates where words start and direction (0 = horizontal)
1241  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,
1242  // End marker
1243  0
1244  };
1245 
1246 
1247  /*
1248  * Name: 19.01, 19 x 19
1249  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1250  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1251  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
1252  * (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
1253  * (* * * _ _ _ * _ _ _ _ * _ _ _ _ * * *)
1254  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
1255  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
1256  * (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1257  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
1258  * (* * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * *)
1259  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
1260  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
1261  * (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
1262  * (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1263  * (* * * _ _ _ _ * _ _ _ _ * _ _ _ * * *)
1264  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
1265  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
1266  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1267  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1268  */
1269  const int g20[] = {
1270  // Width and height of crossword grid
1271  19, 19,
1272  // Number of black fields
1273  60,
1274  // Black field coordinates
1275  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,
1276  // Length and number of words of that length
1277  9, 6,
1278  // Coordinates where words start and direction (0 = horizontal)
1279  0,2,0, 0,16,0, 2,5,1, 10,2,0, 10,16,0, 16,5,1,
1280  // Length and number of words of that length
1281  8, 4,
1282  // Coordinates where words start and direction (0 = horizontal)
1283  0,13,0, 5,11,1, 11,5,0, 13,0,1,
1284  // Length and number of words of that length
1285  7, 8,
1286  // Coordinates where words start and direction (0 = horizontal)
1287  0,3,0, 0,8,0, 3,0,1, 8,0,1, 10,12,1, 12,10,0, 12,15,0, 15,12,1,
1288  // Length and number of words of that length
1289  6, 4,
1290  // Coordinates where words start and direction (0 = horizontal)
1291  0,15,0, 3,13,1, 13,3,0, 15,0,1,
1292  // Length and number of words of that length
1293  5, 24,
1294  // Coordinates where words start and direction (0 = horizontal)
1295  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,
1296  // Length and number of words of that length
1297  4, 70,
1298  // Coordinates where words start and direction (0 = horizontal)
1299  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,
1300  // Length and number of words of that length
1301  3, 12,
1302  // Coordinates where words start and direction (0 = horizontal)
1303  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,
1304  // End marker
1305  0
1306  };
1307 
1308 
1309  /*
1310  * Name: 19.02, 19 x 19
1311  * (_ _ _ _ _ * * _ _ _ _ _ * * _ _ _ _ _)
1312  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1313  * (_ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _)
1314  * (_ _ _ _ * _ _ _ _ _ * * _ _ _ _ _ _ _)
1315  * (* * * _ _ _ _ _ _ * _ _ _ _ _ _ _ * *)
1316  * (_ _ _ _ _ _ _ * * _ _ _ _ _ * _ _ _ _)
1317  * (_ _ _ _ _ * * _ _ _ _ _ _ _ * * _ _ _)
1318  * (_ _ _ * * _ _ _ _ _ _ _ _ * _ _ _ _ _)
1319  * (_ _ _ _ * _ _ _ _ _ * * * _ _ _ _ _ _)
1320  * (* * _ _ _ _ _ _ _ * _ _ _ _ _ _ _ * *)
1321  * (_ _ _ _ _ _ * * * _ _ _ _ _ * _ _ _ _)
1322  * (_ _ _ _ _ * _ _ _ _ _ _ _ _ * * _ _ _)
1323  * (_ _ _ * * _ _ _ _ _ _ _ * * _ _ _ _ _)
1324  * (_ _ _ _ * _ _ _ _ _ * * _ _ _ _ _ _ _)
1325  * (* * _ _ _ _ _ _ _ * _ _ _ _ _ _ * * *)
1326  * (_ _ _ _ _ _ _ * * _ _ _ _ _ * _ _ _ _)
1327  * (_ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _)
1328  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1329  * (_ _ _ _ _ * * _ _ _ _ _ * * _ _ _ _ _)
1330  */
1331  const int g21[] = {
1332  // Width and height of crossword grid
1333  19, 19,
1334  // Number of black fields
1335  65,
1336  // Black field coordinates
1337  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,
1338  // Length and number of words of that length
1339  14, 2,
1340  // Coordinates where words start and direction (0 = horizontal)
1341  2,5,1, 16,0,1,
1342  // Length and number of words of that length
1343  13, 2,
1344  // Coordinates where words start and direction (0 = horizontal)
1345  0,2,0, 6,16,0,
1346  // Length and number of words of that length
1347  8, 2,
1348  // Coordinates where words start and direction (0 = horizontal)
1349  5,7,0, 6,11,0,
1350  // Length and number of words of that length
1351  7, 16,
1352  // Coordinates where words start and direction (0 = horizontal)
1353  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,
1354  // Length and number of words of that length
1355  6, 6,
1356  // Coordinates where words start and direction (0 = horizontal)
1357  0,10,0, 3,4,0, 3,13,1, 10,14,0, 13,8,0, 15,0,1,
1358  // Length and number of words of that length
1359  5, 30,
1360  // Coordinates where words start and direction (0 = horizontal)
1361  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,
1362  // Length and number of words of that length
1363  4, 44,
1364  // Coordinates where words start and direction (0 = horizontal)
1365  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,
1366  // Length and number of words of that length
1367  3, 16,
1368  // Coordinates where words start and direction (0 = horizontal)
1369  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,
1370  // End marker
1371  0
1372  };
1373 
1374 
1375  /*
1376  * Name: 19.03, 19 x 19
1377  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1378  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1379  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1380  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
1381  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1382  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1383  * (* * * _ _ _ _ _ * _ _ _ _ _ _ _ * * *)
1384  * (_ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _)
1385  * (_ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
1386  * (_ _ _ * * _ _ _ _ _ _ _ _ _ * * _ _ _)
1387  * (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _)
1388  * (_ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _)
1389  * (* * * _ _ _ _ _ _ _ * _ _ _ _ _ * * *)
1390  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1391  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1392  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
1393  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1394  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1395  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1396  */
1397  const int g22[] = {
1398  // Width and height of crossword grid
1399  19, 19,
1400  // Number of black fields
1401  54,
1402  // Black field coordinates
1403  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,
1404  // Length and number of words of that length
1405  9, 2,
1406  // Coordinates where words start and direction (0 = horizontal)
1407  5,9,0, 9,5,1,
1408  // Length and number of words of that length
1409  8, 4,
1410  // Coordinates where words start and direction (0 = horizontal)
1411  0,10,0, 8,11,1, 10,0,1, 11,8,0,
1412  // Length and number of words of that length
1413  7, 16,
1414  // Coordinates where words start and direction (0 = horizontal)
1415  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,
1416  // Length and number of words of that length
1417  6, 28,
1418  // Coordinates where words start and direction (0 = horizontal)
1419  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,
1420  // Length and number of words of that length
1421  5, 32,
1422  // Coordinates where words start and direction (0 = horizontal)
1423  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,
1424  // Length and number of words of that length
1425  4, 16,
1426  // Coordinates where words start and direction (0 = horizontal)
1427  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,
1428  // Length and number of words of that length
1429  3, 20,
1430  // Coordinates where words start and direction (0 = horizontal)
1431  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,
1432  // End marker
1433  0
1434  };
1435 
1436 
1437  /*
1438  * Name: 19.04, 19 x 19
1439  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1440  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1441  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1442  * (_ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _)
1443  * (_ _ _ _ * _ _ _ * * * _ _ _ * _ _ _ _)
1444  * (* * * _ _ _ _ _ _ _ _ _ _ _ _ _ * * *)
1445  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1446  * (_ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _)
1447  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1448  * (_ _ _ _ * _ _ _ * * * _ _ _ * _ _ _ _)
1449  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1450  * (_ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _)
1451  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1452  * (* * * _ _ _ _ _ _ _ _ _ _ _ _ _ * * *)
1453  * (_ _ _ _ * _ _ _ * * * _ _ _ * _ _ _ _)
1454  * (_ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _)
1455  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1456  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1457  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
1458  */
1459  const int g23[] = {
1460  // Width and height of crossword grid
1461  19, 19,
1462  // Number of black fields
1463  65,
1464  // Black field coordinates
1465  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,
1466  // Length and number of words of that length
1467  13, 4,
1468  // Coordinates where words start and direction (0 = horizontal)
1469  3,5,0, 3,13,0, 5,3,1, 13,3,1,
1470  // Length and number of words of that length
1471  7, 12,
1472  // Coordinates where words start and direction (0 = horizontal)
1473  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,
1474  // Length and number of words of that length
1475  6, 8,
1476  // Coordinates where words start and direction (0 = horizontal)
1477  0,6,0, 0,12,0, 6,0,1, 6,13,1, 12,0,1, 12,13,1, 13,6,0, 13,12,0,
1478  // Length and number of words of that length
1479  5, 28,
1480  // Coordinates where words start and direction (0 = horizontal)
1481  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,
1482  // Length and number of words of that length
1483  4, 28,
1484  // Coordinates where words start and direction (0 = horizontal)
1485  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,
1486  // Length and number of words of that length
1487  3, 52,
1488  // Coordinates where words start and direction (0 = horizontal)
1489  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,
1490  // End marker
1491  0
1492  };
1493 
1494 
1495  /*
1496  * Name: 19.05, 19 x 19
1497  * (_ _ _ _ * * _ _ _ * _ _ _ _ * _ _ _ _)
1498  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1499  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1500  * (_ _ _ _ _ _ _ * _ _ _ * _ _ _ _ * * *)
1501  * (* * * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
1502  * (_ _ _ _ _ _ * _ _ _ _ _ * * _ _ _ _ _)
1503  * (_ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _ _)
1504  * (_ _ _ _ * _ _ _ _ * * _ _ _ _ * _ _ _)
1505  * (_ _ _ _ * * _ _ _ _ _ * _ _ _ _ * * *)
1506  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
1507  * (* * * _ _ _ _ * _ _ _ _ _ * * _ _ _ _)
1508  * (_ _ _ * _ _ _ _ * * _ _ _ _ * _ _ _ _)
1509  * (_ _ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _)
1510  * (_ _ _ _ _ * * _ _ _ _ _ * _ _ _ _ _ _)
1511  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * * *)
1512  * (* * * _ _ _ _ * _ _ _ * _ _ _ _ _ _ _)
1513  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1514  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1515  * (_ _ _ _ * _ _ _ _ * _ _ _ * * _ _ _ _)
1516  */
1517  const int g24[] = {
1518  // Width and height of crossword grid
1519  19, 19,
1520  // Number of black fields
1521  70,
1522  // Black field coordinates
1523  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,
1524  // Length and number of words of that length
1525  19, 1,
1526  // Coordinates where words start and direction (0 = horizontal)
1527  0,9,0,
1528  // Length and number of words of that length
1529  16, 2,
1530  // Coordinates where words start and direction (0 = horizontal)
1531  0,14,0, 3,4,0,
1532  // Length and number of words of that length
1533  7, 10,
1534  // Coordinates where words start and direction (0 = horizontal)
1535  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,
1536  // Length and number of words of that length
1537  6, 8,
1538  // Coordinates where words start and direction (0 = horizontal)
1539  0,5,0, 3,0,1, 7,4,1, 8,0,1, 10,13,1, 11,9,1, 13,13,0, 15,13,1,
1540  // Length and number of words of that length
1541  5, 18,
1542  // Coordinates where words start and direction (0 = horizontal)
1543  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,
1544  // Length and number of words of that length
1545  4, 62,
1546  // Coordinates where words start and direction (0 = horizontal)
1547  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,
1548  // Length and number of words of that length
1549  3, 25,
1550  // Coordinates where words start and direction (0 = horizontal)
1551  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,
1552  // End marker
1553  0
1554  };
1555 
1556 
1557  /*
1558  * Name: 19.06, 19 x 19
1559  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1560  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1561  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1562  * (* _ _ _ * _ _ _ _ _ _ _ _ _ _ _ * * *)
1563  * (* * * _ _ _ * * _ _ _ * * _ _ _ _ * *)
1564  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
1565  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
1566  * (_ _ _ _ * _ _ _ * _ _ _ _ _ * * _ _ _)
1567  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
1568  * (* * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * *)
1569  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
1570  * (_ _ _ * * _ _ _ _ _ * _ _ _ * _ _ _ _)
1571  * (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
1572  * (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1573  * (* * _ _ _ _ * * _ _ _ * * _ _ _ * * *)
1574  * (* * * _ _ _ _ _ _ _ _ _ _ _ * _ _ _ *)
1575  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1576  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1577  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1578  */
1579  const int g25[] = {
1580  // Width and height of crossword grid
1581  19, 19,
1582  // Number of black fields
1583  74,
1584  // Black field coordinates
1585  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,
1586  // Length and number of words of that length
1587  11, 4,
1588  // Coordinates where words start and direction (0 = horizontal)
1589  3,0,1, 3,15,0, 5,3,0, 15,8,1,
1590  // Length and number of words of that length
1591  10, 2,
1592  // Coordinates where words start and direction (0 = horizontal)
1593  2,5,1, 16,4,1,
1594  // Length and number of words of that length
1595  8, 4,
1596  // Coordinates where words start and direction (0 = horizontal)
1597  0,13,0, 5,11,1, 11,5,0, 13,0,1,
1598  // Length and number of words of that length
1599  7, 4,
1600  // Coordinates where words start and direction (0 = horizontal)
1601  0,8,0, 8,0,1, 10,12,1, 12,10,0,
1602  // Length and number of words of that length
1603  6, 2,
1604  // Coordinates where words start and direction (0 = horizontal)
1605  3,13,1, 15,0,1,
1606  // Length and number of words of that length
1607  5, 22,
1608  // Coordinates where words start and direction (0 = horizontal)
1609  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,
1610  // Length and number of words of that length
1611  4, 58,
1612  // Coordinates where words start and direction (0 = horizontal)
1613  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,
1614  // Length and number of words of that length
1615  3, 32,
1616  // Coordinates where words start and direction (0 = horizontal)
1617  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,
1618  // End marker
1619  0
1620  };
1621 
1622 
1623  /*
1624  * Name: 19.07, 19 x 19
1625  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
1626  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
1627  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
1628  * (_ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _ _)
1629  * (* * * * _ _ _ * _ _ _ _ * _ _ _ * * *)
1630  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
1631  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
1632  * (_ _ _ _ * _ _ _ * * _ _ _ * * _ _ _ _)
1633  * (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
1634  * (* * * _ _ _ _ * _ _ _ * _ _ _ _ * * *)
1635  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
1636  * (_ _ _ _ * * _ _ _ * * _ _ _ * _ _ _ _)
1637  * (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1638  * (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
1639  * (* * * _ _ _ * _ _ _ _ * _ _ _ * * * *)
1640  * (_ _ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _)
1641  * (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
1642  * (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1643  * (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1644  */
1645  const int g26[] = {
1646  // Width and height of crossword grid
1647  19, 19,
1648  // Number of black fields
1649  70,
1650  // Black field coordinates
1651  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,
1652  // Length and number of words of that length
1653  15, 2,
1654  // Coordinates where words start and direction (0 = horizontal)
1655  0,2,0, 4,16,0,
1656  // Length and number of words of that length
1657  11, 2,
1658  // Coordinates where words start and direction (0 = horizontal)
1659  3,5,1, 15,3,1,
1660  // Length and number of words of that length
1661  8, 2,
1662  // Coordinates where words start and direction (0 = horizontal)
1663  0,12,0, 11,6,0,
1664  // Length and number of words of that length
1665  7, 8,
1666  // Coordinates where words start and direction (0 = horizontal)
1667  0,8,0, 0,13,0, 4,0,1, 9,0,1, 9,12,1, 12,5,0, 12,10,0, 14,12,1,
1668  // Length and number of words of that length
1669  6, 4,
1670  // Coordinates where words start and direction (0 = horizontal)
1671  0,5,0, 0,10,0, 13,8,0, 13,13,0,
1672  // Length and number of words of that length
1673  5, 10,
1674  // Coordinates where words start and direction (0 = horizontal)
1675  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,
1676  // Length and number of words of that length
1677  4, 66,
1678  // Coordinates where words start and direction (0 = horizontal)
1679  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,
1680  // Length and number of words of that length
1681  3, 40,
1682  // Coordinates where words start and direction (0 = horizontal)
1683  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,
1684  // End marker
1685  0
1686  };
1687 
1688 
1689  /*
1690  * Name: 19.08, 19 x 19
1691  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1692  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1693  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1694  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _)
1695  * (* * * _ _ _ * * _ _ _ _ * _ _ _ * * *)
1696  * (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1697  * (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
1698  * (_ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _)
1699  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
1700  * (* * * _ _ _ * _ _ _ _ _ * _ _ _ * * *)
1701  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
1702  * (_ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _)
1703  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
1704  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
1705  * (* * * _ _ _ * _ _ _ _ * * _ _ _ * * *)
1706  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
1707  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1708  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1709  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1710  */
1711  const int g27[] = {
1712  // Width and height of crossword grid
1713  19, 19,
1714  // Number of black fields
1715  66,
1716  // Black field coordinates
1717  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,
1718  // Length and number of words of that length
1719  12, 2,
1720  // Coordinates where words start and direction (0 = horizontal)
1721  3,7,1, 15,0,1,
1722  // Length and number of words of that length
1723  10, 2,
1724  // Coordinates where words start and direction (0 = horizontal)
1725  0,3,0, 9,15,0,
1726  // Length and number of words of that length
1727  8, 8,
1728  // Coordinates where words start and direction (0 = horizontal)
1729  0,5,0, 0,15,0, 5,0,1, 7,11,1, 11,0,1, 11,3,0, 11,13,0, 13,11,1,
1730  // Length and number of words of that length
1731  7, 2,
1732  // Coordinates where words start and direction (0 = horizontal)
1733  0,10,0, 12,8,0,
1734  // Length and number of words of that length
1735  6, 2,
1736  // Coordinates where words start and direction (0 = horizontal)
1737  3,0,1, 15,13,1,
1738  // Length and number of words of that length
1739  5, 20,
1740  // Coordinates where words start and direction (0 = horizontal)
1741  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,
1742  // Length and number of words of that length
1743  4, 74,
1744  // Coordinates where words start and direction (0 = horizontal)
1745  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,
1746  // Length and number of words of that length
1747  3, 20,
1748  // Coordinates where words start and direction (0 = horizontal)
1749  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,
1750  // End marker
1751  0
1752  };
1753 
1754 
1755  /*
1756  * Name: 19.09, 19 x 19
1757  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1758  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1759  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1760  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
1761  * (* * * _ _ _ _ * _ _ _ * * _ _ _ _ * *)
1762  * (_ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
1763  * (_ _ _ _ _ * _ _ _ * _ _ _ _ * _ _ _ _)
1764  * (_ _ _ * * _ _ _ * _ _ _ _ _ * * _ _ _)
1765  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
1766  * (* * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * *)
1767  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
1768  * (_ _ _ * * _ _ _ _ _ * _ _ _ * * _ _ _)
1769  * (_ _ _ _ * _ _ _ _ * _ _ _ * _ _ _ _ _)
1770  * (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _)
1771  * (* * _ _ _ _ * * _ _ _ * _ _ _ _ * * *)
1772  * (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
1773  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1774  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1775  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1776  */
1777  const int g28[] = {
1778  // Width and height of crossword grid
1779  19, 19,
1780  // Number of black fields
1781  66,
1782  // Black field coordinates
1783  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,
1784  // Length and number of words of that length
1785  15, 2,
1786  // Coordinates where words start and direction (0 = horizontal)
1787  0,3,0, 4,15,0,
1788  // Length and number of words of that length
1789  14, 2,
1790  // Coordinates where words start and direction (0 = horizontal)
1791  2,5,1, 16,0,1,
1792  // Length and number of words of that length
1793  8, 4,
1794  // Coordinates where words start and direction (0 = horizontal)
1795  0,13,0, 5,11,1, 11,5,0, 13,0,1,
1796  // Length and number of words of that length
1797  7, 6,
1798  // Coordinates where words start and direction (0 = horizontal)
1799  0,8,0, 3,0,1, 8,0,1, 10,12,1, 12,10,0, 15,12,1,
1800  // Length and number of words of that length
1801  6, 4,
1802  // Coordinates where words start and direction (0 = horizontal)
1803  0,5,0, 5,0,1, 13,13,0, 13,13,1,
1804  // Length and number of words of that length
1805  5, 18,
1806  // Coordinates where words start and direction (0 = horizontal)
1807  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,
1808  // Length and number of words of that length
1809  4, 62,
1810  // Coordinates where words start and direction (0 = horizontal)
1811  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,
1812  // Length and number of words of that length
1813  3, 32,
1814  // Coordinates where words start and direction (0 = horizontal)
1815  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,
1816  // End marker
1817  0
1818  };
1819 
1820 
1821  /*
1822  * Name: 19.10, 19 x 19
1823  * (_ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _ _)
1824  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1825  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
1826  * (_ _ _ _ _ _ _ * _ _ _ _ * * _ _ _ _ *)
1827  * (* * * _ _ _ * _ _ _ _ * _ _ _ _ * * *)
1828  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
1829  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _)
1830  * (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1831  * (* _ _ _ _ _ _ * _ _ _ _ * * _ _ _ _ _)
1832  * (* * * _ _ _ _ _ _ _ _ _ _ _ _ _ * * *)
1833  * (_ _ _ _ _ * * _ _ _ _ * _ _ _ _ _ _ *)
1834  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
1835  * (_ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _ _)
1836  * (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1837  * (* * * _ _ _ _ * _ _ _ _ * _ _ _ * * *)
1838  * (* _ _ _ _ * * _ _ _ _ * _ _ _ _ _ _ _)
1839  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
1840  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
1841  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _)
1842  */
1843  const int g29[] = {
1844  // Width and height of crossword grid
1845  19, 19,
1846  // Number of black fields
1847  70,
1848  // Black field coordinates
1849  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,
1850  // Length and number of words of that length
1851  19, 2,
1852  // Coordinates where words start and direction (0 = horizontal)
1853  0,2,0, 0,16,0,
1854  // Length and number of words of that length
1855  13, 1,
1856  // Coordinates where words start and direction (0 = horizontal)
1857  3,9,0,
1858  // Length and number of words of that length
1859  8, 2,
1860  // Coordinates where words start and direction (0 = horizontal)
1861  0,13,0, 11,5,0,
1862  // Length and number of words of that length
1863  7, 4,
1864  // Coordinates where words start and direction (0 = horizontal)
1865  0,3,0, 8,0,1, 10,12,1, 12,15,0,
1866  // Length and number of words of that length
1867  6, 6,
1868  // Coordinates where words start and direction (0 = horizontal)
1869  1,8,0, 3,1,1, 3,13,1, 12,10,0, 15,0,1, 15,12,1,
1870  // Length and number of words of that length
1871  5, 17,
1872  // Coordinates where words start and direction (0 = horizontal)
1873  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,
1874  // Length and number of words of that length
1875  4, 78,
1876  // Coordinates where words start and direction (0 = horizontal)
1877  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,
1878  // Length and number of words of that length
1879  3, 18,
1880  // Coordinates where words start and direction (0 = horizontal)
1881  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,
1882  // End marker
1883  0
1884  };
1885 
1886 
1887  /*
1888  * Name: 21.01, 21 x 21
1889  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1890  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1891  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
1892  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1893  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
1894  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
1895  * (_ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
1896  * (_ _ _ _ * _ _ _ _ * * * _ _ _ _ * _ _ _ _)
1897  * (_ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
1898  * (_ _ _ _ _ _ _ _ * _ _ _ _ * * _ _ _ _ _ _)
1899  * (* * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * *)
1900  * (_ _ _ _ _ _ * * _ _ _ _ * _ _ _ _ _ _ _ _)
1901  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _)
1902  * (_ _ _ _ * _ _ _ _ * * * _ _ _ _ * _ _ _ _)
1903  * (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _)
1904  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
1905  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
1906  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
1907  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
1908  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1909  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1910  */
1911  const int g30[] = {
1912  // Width and height of crossword grid
1913  21, 21,
1914  // Number of black fields
1915  68,
1916  // Black field coordinates
1917  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,
1918  // Length and number of words of that length
1919  12, 2,
1920  // Coordinates where words start and direction (0 = horizontal)
1921  5,7,1, 15,2,1,
1922  // Length and number of words of that length
1923  11, 4,
1924  // Coordinates where words start and direction (0 = horizontal)
1925  2,5,1, 4,14,0, 6,6,0, 18,5,1,
1926  // Length and number of words of that length
1927  10, 4,
1928  // Coordinates where words start and direction (0 = horizontal)
1929  0,2,0, 0,18,0, 11,2,0, 11,18,0,
1930  // Length and number of words of that length
1931  9, 2,
1932  // Coordinates where words start and direction (0 = horizontal)
1933  4,8,0, 8,12,0,
1934  // Length and number of words of that length
1935  8, 8,
1936  // Coordinates where words start and direction (0 = horizontal)
1937  0,3,0, 0,9,0, 0,15,0, 3,0,1, 13,5,0, 13,11,0, 13,17,0, 17,13,1,
1938  // Length and number of words of that length
1939  7, 8,
1940  // Coordinates where words start and direction (0 = horizontal)
1941  0,12,0, 4,14,1, 9,0,1, 9,14,1, 11,0,1, 11,14,1, 14,8,0, 16,0,1,
1942  // Length and number of words of that length
1943  6, 10,
1944  // Coordinates where words start and direction (0 = horizontal)
1945  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,
1946  // Length and number of words of that length
1947  5, 50,
1948  // Coordinates where words start and direction (0 = horizontal)
1949  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,
1950  // Length and number of words of that length
1951  4, 40,
1952  // Coordinates where words start and direction (0 = horizontal)
1953  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,
1954  // Length and number of words of that length
1955  3, 10,
1956  // Coordinates where words start and direction (0 = horizontal)
1957  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,
1958  // End marker
1959  0
1960  };
1961 
1962 
1963  /*
1964  * Name: 21.02, 21 x 21
1965  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1966  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1967  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1968  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
1969  * (* * * _ _ _ _ _ * _ _ _ * _ _ _ _ _ * * *)
1970  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _)
1971  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
1972  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1973  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _)
1974  * (_ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _)
1975  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
1976  * (_ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _)
1977  * (_ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
1978  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
1979  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
1980  * (_ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
1981  * (* * * _ _ _ _ _ * _ _ _ * _ _ _ _ _ * * *)
1982  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
1983  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1984  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1985  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
1986  */
1987  const int g31[] = {
1988  // Width and height of crossword grid
1989  21, 21,
1990  // Number of black fields
1991  72,
1992  // Black field coordinates
1993  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,
1994  // Length and number of words of that length
1995  12, 2,
1996  // Coordinates where words start and direction (0 = horizontal)
1997  0,11,0, 9,9,0,
1998  // Length and number of words of that length
1999  9, 4,
2000  // Coordinates where words start and direction (0 = horizontal)
2001  0,17,0, 3,0,1, 12,3,0, 17,12,1,
2002  // Length and number of words of that length
2003  8, 4,
2004  // Coordinates where words start and direction (0 = horizontal)
2005  9,0,1, 9,9,1, 11,4,1, 11,13,1,
2006  // Length and number of words of that length
2007  7, 8,
2008  // Coordinates where words start and direction (0 = horizontal)
2009  0,5,0, 5,14,1, 6,7,1, 7,6,0, 7,14,0, 14,7,1, 14,15,0, 15,0,1,
2010  // Length and number of words of that length
2011  6, 12,
2012  // Coordinates where words start and direction (0 = horizontal)
2013  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,
2014  // Length and number of words of that length
2015  5, 54,
2016  // Coordinates where words start and direction (0 = horizontal)
2017  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,
2018  // Length and number of words of that length
2019  4, 50,
2020  // Coordinates where words start and direction (0 = horizontal)
2021  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,
2022  // Length and number of words of that length
2023  3, 16,
2024  // Coordinates where words start and direction (0 = horizontal)
2025  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,
2026  // End marker
2027  0
2028  };
2029 
2030 
2031  /*
2032  * Name: 21.03, 21 x 21
2033  * (_ _ _ _ * * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2034  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2035  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2036  * (_ _ _ * _ _ _ _ _ * * _ _ _ _ _ _ _ _ * *)
2037  * (_ _ _ _ _ * _ _ _ _ _ * * _ _ _ _ * _ _ _)
2038  * (* * _ _ _ * _ _ _ _ _ * _ _ _ _ * * _ _ _)
2039  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ _)
2040  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
2041  * (_ _ _ _ * _ _ _ * _ _ _ _ * _ _ _ _ _ _ *)
2042  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ * * *)
2043  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
2044  * (* * * _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
2045  * (* _ _ _ _ _ _ * _ _ _ _ * _ _ _ * _ _ _ _)
2046  * (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ _)
2047  * (_ _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ _ _)
2048  * (_ _ _ * * _ _ _ _ * _ _ _ _ _ * _ _ _ * *)
2049  * (_ _ _ * _ _ _ _ * * _ _ _ _ _ * _ _ _ _ _)
2050  * (* * _ _ _ _ _ _ _ _ * * _ _ _ _ _ * _ _ _)
2051  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
2052  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
2053  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * * _ _ _ _)
2054  */
2055  const int g32[] = {
2056  // Width and height of crossword grid
2057  21, 21,
2058  // Number of black fields
2059  79,
2060  // Black field coordinates
2061  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,
2062  // Length and number of words of that length
2063  11, 2,
2064  // Coordinates where words start and direction (0 = horizontal)
2065  2,0,1, 18,10,1,
2066  // Length and number of words of that length
2067  9, 2,
2068  // Coordinates where words start and direction (0 = horizontal)
2069  2,12,1, 18,0,1,
2070  // Length and number of words of that length
2071  8, 12,
2072  // Coordinates where words start and direction (0 = horizontal)
2073  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,
2074  // Length and number of words of that length
2075  7, 8,
2076  // Coordinates where words start and direction (0 = horizontal)
2077  0,7,0, 6,14,1, 7,0,1, 8,9,1, 12,5,1, 13,14,1, 14,0,1, 14,13,0,
2078  // Length and number of words of that length
2079  6, 18,
2080  // Coordinates where words start and direction (0 = horizontal)
2081  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,
2082  // Length and number of words of that length
2083  5, 42,
2084  // Coordinates where words start and direction (0 = horizontal)
2085  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,
2086  // Length and number of words of that length
2087  4, 34,
2088  // Coordinates where words start and direction (0 = horizontal)
2089  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,
2090  // Length and number of words of that length
2091  3, 26,
2092  // Coordinates where words start and direction (0 = horizontal)
2093  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,
2094  // End marker
2095  0
2096  };
2097 
2098 
2099  /*
2100  * Name: 21.04, 21 x 21
2101  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2102  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2103  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2104  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
2105  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2106  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2107  * (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
2108  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2109  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2110  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
2111  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2112  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2113  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2114  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2115  * (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
2116  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
2117  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2118  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
2119  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2120  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2121  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2122  */
2123  const int g33[] = {
2124  // Width and height of crossword grid
2125  21, 21,
2126  // Number of black fields
2127  63,
2128  // Black field coordinates
2129  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,
2130  // Length and number of words of that length
2131  8, 8,
2132  // Coordinates where words start and direction (0 = horizontal)
2133  0,6,0, 0,14,0, 6,0,1, 6,13,1, 13,6,0, 13,14,0, 14,0,1, 14,13,1,
2134  // Length and number of words of that length
2135  7, 32,
2136  // Coordinates where words start and direction (0 = horizontal)
2137  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,
2138  // Length and number of words of that length
2139  6, 8,
2140  // Coordinates where words start and direction (0 = horizontal)
2141  0,8,0, 0,12,0, 8,0,1, 8,15,1, 12,0,1, 12,15,1, 15,8,0, 15,12,0,
2142  // Length and number of words of that length
2143  5, 56,
2144  // Coordinates where words start and direction (0 = horizontal)
2145  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,
2146  // Length and number of words of that length
2147  4, 20,
2148  // Coordinates where words start and direction (0 = horizontal)
2149  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,
2150  // Length and number of words of that length
2151  3, 20,
2152  // Coordinates where words start and direction (0 = horizontal)
2153  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,
2154  // End marker
2155  0
2156  };
2157 
2158 
2159  /*
2160  * Name: 21.05, 21 x 21
2161  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2162  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2163  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2164  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
2165  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2166  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2167  * (* * * _ _ _ * * * _ _ _ * * * _ _ _ * * *)
2168  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2169  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2170  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2171  * (_ _ _ _ * _ _ _ _ * * * _ _ _ _ * _ _ _ _)
2172  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _)
2173  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2174  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2175  * (* * * _ _ _ * * * _ _ _ * * * _ _ _ * * *)
2176  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
2177  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2178  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
2179  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2180  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2181  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2182  */
2183  const int g34[] = {
2184  // Width and height of crossword grid
2185  21, 21,
2186  // Number of black fields
2187  73,
2188  // Black field coordinates
2189  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,
2190  // Length and number of words of that length
2191  7, 24,
2192  // Coordinates where words start and direction (0 = horizontal)
2193  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,
2194  // Length and number of words of that length
2195  6, 44,
2196  // Coordinates where words start and direction (0 = horizontal)
2197  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,
2198  // Length and number of words of that length
2199  5, 28,
2200  // Coordinates where words start and direction (0 = horizontal)
2201  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,
2202  // Length and number of words of that length
2203  4, 20,
2204  // Coordinates where words start and direction (0 = horizontal)
2205  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,
2206  // Length and number of words of that length
2207  3, 28,
2208  // Coordinates where words start and direction (0 = horizontal)
2209  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,
2210  // End marker
2211  0
2212  };
2213 
2214 
2215  /*
2216  * Name: 21.06, 21 x 21
2217  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2218  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2219  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _)
2220  * (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
2221  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2222  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2223  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2224  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2225  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
2226  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2227  * (* * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * *)
2228  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2229  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
2230  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2231  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
2232  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2233  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2234  * (_ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _)
2235  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _)
2236  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2237  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2238  */
2239  const int g35[] = {
2240  // Width and height of crossword grid
2241  21, 21,
2242  // Number of black fields
2243  68,
2244  // Black field coordinates
2245  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,
2246  // Length and number of words of that length
2247  11, 4,
2248  // Coordinates where words start and direction (0 = horizontal)
2249  2,5,1, 5,2,0, 5,18,0, 18,5,1,
2250  // Length and number of words of that length
2251  8, 12,
2252  // Coordinates where words start and direction (0 = horizontal)
2253  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,
2254  // Length and number of words of that length
2255  7, 8,
2256  // Coordinates where words start and direction (0 = horizontal)
2257  4,8,0, 5,7,1, 7,5,0, 7,15,0, 8,10,1, 10,12,0, 12,4,1, 15,7,1,
2258  // Length and number of words of that length
2259  6, 12,
2260  // Coordinates where words start and direction (0 = horizontal)
2261  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,
2262  // Length and number of words of that length
2263  5, 54,
2264  // Coordinates where words start and direction (0 = horizontal)
2265  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,
2266  // Length and number of words of that length
2267  4, 40,
2268  // Coordinates where words start and direction (0 = horizontal)
2269  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,
2270  // Length and number of words of that length
2271  3, 16,
2272  // Coordinates where words start and direction (0 = horizontal)
2273  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,
2274  // End marker
2275  0
2276  };
2277 
2278 
2279  /*
2280  * Name: 21.07, 21 x 21
2281  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2282  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2283  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
2284  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2285  * (* * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * *)
2286  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
2287  * (_ _ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _ _)
2288  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2289  * (_ _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ _)
2290  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2291  * (* * * _ _ _ _ _ * * * * * _ _ _ _ _ * * *)
2292  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _)
2293  * (_ _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ _)
2294  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2295  * (_ _ _ _ * _ _ _ * _ _ _ * _ _ _ * _ _ _ _)
2296  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
2297  * (* * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * *)
2298  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
2299  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
2300  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2301  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2302  */
2303  const int g36[] = {
2304  // Width and height of crossword grid
2305  21, 21,
2306  // Number of black fields
2307  73,
2308  // Black field coordinates
2309  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,
2310  // Length and number of words of that length
2311  10, 8,
2312  // Coordinates where words start and direction (0 = horizontal)
2313  0,2,0, 0,18,0, 2,0,1, 2,11,1, 11,2,0, 11,18,0, 18,0,1, 18,11,1,
2314  // Length and number of words of that length
2315  7, 16,
2316  // Coordinates where words start and direction (0 = horizontal)
2317  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,
2318  // Length and number of words of that length
2319  6, 12,
2320  // Coordinates where words start and direction (0 = horizontal)
2321  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,
2322  // Length and number of words of that length
2323  5, 44,
2324  // Coordinates where words start and direction (0 = horizontal)
2325  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,
2326  // Length and number of words of that length
2327  4, 36,
2328  // Coordinates where words start and direction (0 = horizontal)
2329  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,
2330  // Length and number of words of that length
2331  3, 36,
2332  // Coordinates where words start and direction (0 = horizontal)
2333  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,
2334  // End marker
2335  0
2336  };
2337 
2338 
2339  /*
2340  * Name: 21.08, 21 x 21
2341  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2342  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2343  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2344  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2345  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2346  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2347  * (_ _ _ _ _ * * _ _ _ _ * _ _ _ _ _ * _ _ _)
2348  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2349  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2350  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
2351  * (* * * _ _ _ _ * * _ _ _ * * _ _ _ _ * * *)
2352  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ _)
2353  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
2354  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2355  * (_ _ _ * _ _ _ _ _ * _ _ _ _ * * _ _ _ _ _)
2356  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2357  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2358  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2359  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2360  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2361  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2362  */
2363  const int g37[] = {
2364  // Width and height of crossword grid
2365  21, 21,
2366  // Number of black fields
2367  76,
2368  // Black field coordinates
2369  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,
2370  // Length and number of words of that length
2371  9, 2,
2372  // Coordinates where words start and direction (0 = horizontal)
2373  0,9,0, 12,11,0,
2374  // Length and number of words of that length
2375  8, 10,
2376  // Coordinates where words start and direction (0 = horizontal)
2377  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,
2378  // Length and number of words of that length
2379  6, 14,
2380  // Coordinates where words start and direction (0 = horizontal)
2381  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,
2382  // Length and number of words of that length
2383  5, 61,
2384  // Coordinates where words start and direction (0 = horizontal)
2385  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,
2386  // Length and number of words of that length
2387  4, 54,
2388  // Coordinates where words start and direction (0 = horizontal)
2389  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,
2390  // Length and number of words of that length
2391  3, 9,
2392  // Coordinates where words start and direction (0 = horizontal)
2393  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,
2394  // End marker
2395  0
2396  };
2397 
2398 
2399  /*
2400  * Name: 21.09, 21 x 21
2401  * (* * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * *)
2402  * (* _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ *)
2403  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2404  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _)
2405  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2406  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2407  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2408  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2409  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2410  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
2411  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2412  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2413  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2414  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2415  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2416  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
2417  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2418  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
2419  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2420  * (* _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ *)
2421  * (* * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * *)
2422  */
2423  const int g38[] = {
2424  // Width and height of crossword grid
2425  21, 21,
2426  // Number of black fields
2427  75,
2428  // Black field coordinates
2429  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,
2430  // Length and number of words of that length
2431  8, 8,
2432  // Coordinates where words start and direction (0 = horizontal)
2433  0,6,0, 0,12,0, 6,0,1, 8,13,1, 12,0,1, 13,8,0, 13,14,0, 14,13,1,
2434  // Length and number of words of that length
2435  7, 12,
2436  // Coordinates where words start and direction (0 = horizontal)
2437  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,
2438  // Length and number of words of that length
2439  6, 16,
2440  // Coordinates where words start and direction (0 = horizontal)
2441  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,
2442  // Length and number of words of that length
2443  5, 72,
2444  // Coordinates where words start and direction (0 = horizontal)
2445  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,
2446  // Length and number of words of that length
2447  4, 20,
2448  // Coordinates where words start and direction (0 = horizontal)
2449  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,
2450  // Length and number of words of that length
2451  3, 16,
2452  // Coordinates where words start and direction (0 = horizontal)
2453  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,
2454  // End marker
2455  0
2456  };
2457 
2458 
2459  /*
2460  * Name: 21.10, 21 x 21
2461  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2462  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2463  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2464  * (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
2465  * (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ * _ _ _ _)
2466  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _)
2467  * (_ _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ _)
2468  * (* * * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ * * *)
2469  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
2470  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _)
2471  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2472  * (_ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2473  * (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _)
2474  * (* * * _ _ _ _ _ _ _ _ * _ _ _ _ _ _ * * *)
2475  * (_ _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ _)
2476  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2477  * (_ _ _ _ * _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
2478  * (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
2479  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2480  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2481  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2482  */
2483  const int g39[] = {
2484  // Width and height of crossword grid
2485  21, 21,
2486  // Number of black fields
2487  58,
2488  // Black field coordinates
2489  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,
2490  // Length and number of words of that length
2491  13, 4,
2492  // Coordinates where words start and direction (0 = horizontal)
2493  3,4,1, 4,3,0, 4,17,0, 17,4,1,
2494  // Length and number of words of that length
2495  8, 8,
2496  // Coordinates where words start and direction (0 = horizontal)
2497  0,8,0, 3,13,0, 7,10,1, 8,0,1, 10,7,0, 12,13,1, 13,3,1, 13,12,0,
2498  // Length and number of words of that length
2499  7, 42,
2500  // Coordinates where words start and direction (0 = horizontal)
2501  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,
2502  // Length and number of words of that length
2503  6, 16,
2504  // Coordinates where words start and direction (0 = horizontal)
2505  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,
2506  // Length and number of words of that length
2507  5, 28,
2508  // Coordinates where words start and direction (0 = horizontal)
2509  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,
2510  // Length and number of words of that length
2511  4, 12,
2512  // Coordinates where words start and direction (0 = horizontal)
2513  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,
2514  // Length and number of words of that length
2515  3, 24,
2516  // Coordinates where words start and direction (0 = horizontal)
2517  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,
2518  // End marker
2519  0
2520  };
2521 
2522 
2523  /*
2524  * Name: 23.01, 23 x 23
2525  * (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
2526  * (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
2527  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
2528  * (_ _ _ _ * _ _ _ * * _ _ _ _ * _ _ _ _ _ _ _ _)
2529  * (_ _ _ * _ _ _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _)
2530  * (* * * * _ _ _ * _ _ _ * _ _ _ * _ _ _ _ * * *)
2531  * (_ _ _ _ _ _ * _ _ _ * * * _ _ _ _ _ * _ _ _ _)
2532  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2533  * (_ _ _ _ * _ _ _ * * _ _ _ _ _ _ * _ _ _ _ _ _)
2534  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2535  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ * _ _ _ _)
2536  * (* * * _ _ _ _ _ _ _ * * * _ _ _ _ _ _ _ * * *)
2537  * (_ _ _ _ * _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2538  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2539  * (_ _ _ _ _ _ * _ _ _ _ _ _ * * _ _ _ * _ _ _ _)
2540  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2541  * (_ _ _ _ * _ _ _ _ _ * * * _ _ _ * _ _ _ _ _ _)
2542  * (* * * _ _ _ _ * _ _ _ * _ _ _ * _ _ _ * * * *)
2543  * (_ _ _ _ _ _ * * _ _ _ _ _ _ _ _ _ _ _ * _ _ _)
2544  * (_ _ _ _ _ _ _ _ * _ _ _ _ * * _ _ _ * _ _ _ _)
2545  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
2546  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
2547  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
2548  */
2549  const int g40[] = {
2550  // Width and height of crossword grid
2551  23, 23,
2552  // Number of black fields
2553  89,
2554  // Black field coordinates
2555  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,
2556  // Length and number of words of that length
2557  23, 2,
2558  // Coordinates where words start and direction (0 = horizontal)
2559  0,2,0, 0,20,0,
2560  // Length and number of words of that length
2561  17, 2,
2562  // Coordinates where words start and direction (0 = horizontal)
2563  3,6,1, 19,0,1,
2564  // Length and number of words of that length
2565  12, 2,
2566  // Coordinates where words start and direction (0 = horizontal)
2567  9,9,1, 13,2,1,
2568  // Length and number of words of that length
2569  11, 2,
2570  // Coordinates where words start and direction (0 = horizontal)
2571  4,4,0, 8,18,0,
2572  // Length and number of words of that length
2573  8, 2,
2574  // Coordinates where words start and direction (0 = horizontal)
2575  0,19,0, 15,3,0,
2576  // Length and number of words of that length
2577  7, 16,
2578  // Coordinates where words start and direction (0 = horizontal)
2579  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,
2580  // Length and number of words of that length
2581  6, 24,
2582  // Coordinates where words start and direction (0 = horizontal)
2583  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,
2584  // Length and number of words of that length
2585  5, 38,
2586  // Coordinates where words start and direction (0 = horizontal)
2587  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,
2588  // Length and number of words of that length
2589  4, 40,
2590  // Coordinates where words start and direction (0 = horizontal)
2591  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,
2592  // Length and number of words of that length
2593  3, 44,
2594  // Coordinates where words start and direction (0 = horizontal)
2595  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,
2596  // End marker
2597  0
2598  };
2599 
2600 
2601  /*
2602  * Name: 23.02, 23 x 23
2603  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ *)
2604  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2605  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _)
2606  * (_ _ _ * * _ _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _)
2607  * (_ _ _ _ _ _ _ * * _ _ _ _ * _ _ _ _ * _ _ _ _)
2608  * (* * * _ _ _ * _ _ _ _ * * _ _ _ * * _ _ _ _ _)
2609  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ * * *)
2610  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
2611  * (_ _ _ _ * _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
2612  * (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _)
2613  * (* * _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2614  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2615  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ * *)
2616  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
2617  * (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ * _ _ _ _)
2618  * (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2619  * (* * * _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2620  * (_ _ _ _ _ * * _ _ _ * * _ _ _ _ * _ _ _ * * *)
2621  * (_ _ _ _ * _ _ _ _ * _ _ _ _ * * _ _ _ _ _ _ _)
2622  * (_ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ _ * * _ _ _)
2623  * (_ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
2624  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2625  * (* _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2626  */
2627  const int g41[] = {
2628  // Width and height of crossword grid
2629  23, 23,
2630  // Number of black fields
2631  94,
2632  // Black field coordinates
2633  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,
2634  // Length and number of words of that length
2635  12, 2,
2636  // Coordinates where words start and direction (0 = horizontal)
2637  0,20,0, 11,2,0,
2638  // Length and number of words of that length
2639  11, 3,
2640  // Coordinates where words start and direction (0 = horizontal)
2641  6,6,1, 11,6,1, 16,6,1,
2642  // Length and number of words of that length
2643  10, 4,
2644  // Coordinates where words start and direction (0 = horizontal)
2645  0,2,0, 2,6,1, 13,20,0, 20,7,1,
2646  // Length and number of words of that length
2647  9, 4,
2648  // Coordinates where words start and direction (0 = horizontal)
2649  5,3,0, 8,10,1, 9,19,0, 14,4,1,
2650  // Length and number of words of that length
2651  8, 2,
2652  // Coordinates where words start and direction (0 = horizontal)
2653  9,0,1, 13,15,1,
2654  // Length and number of words of that length
2655  7, 7,
2656  // Coordinates where words start and direction (0 = horizontal)
2657  0,4,0, 0,11,0, 0,15,0, 8,11,0, 16,7,0, 16,11,0, 16,18,0,
2658  // Length and number of words of that length
2659  6, 8,
2660  // Coordinates where words start and direction (0 = horizontal)
2661  0,21,0, 1,17,1, 2,17,1, 7,17,1, 15,0,1, 17,1,0, 20,0,1, 21,0,1,
2662  // Length and number of words of that length
2663  5, 48,
2664  // Coordinates where words start and direction (0 = horizontal)
2665  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,
2666  // Length and number of words of that length
2667  4, 72,
2668  // Coordinates where words start and direction (0 = horizontal)
2669  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,
2670  // Length and number of words of that length
2671  3, 32,
2672  // Coordinates where words start and direction (0 = horizontal)
2673  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,
2674  // End marker
2675  0
2676  };
2677 
2678 
2679  /*
2680  * Name: 23.03, 23 x 23
2681  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2682  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2683  * (_ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
2684  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
2685  * (_ _ _ * * _ _ _ * * * _ _ _ _ _ _ _ * _ _ _ _)
2686  * (* * * _ _ _ _ _ _ _ * _ _ _ _ _ * * _ _ _ _ _)
2687  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ * _ _ _ _ * * *)
2688  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
2689  * (_ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _)
2690  * (_ _ _ _ _ _ _ * * _ _ _ _ _ _ _ _ _ * _ _ _ _)
2691  * (_ _ _ * _ _ _ _ _ * * _ _ _ _ _ * _ _ _ _ _ _)
2692  * (* * _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ * *)
2693  * (_ _ _ _ _ _ * _ _ _ _ _ * * _ _ _ _ _ * _ _ _)
2694  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _ _)
2695  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _)
2696  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2697  * (* * * _ _ _ _ * _ _ _ * _ _ _ _ * _ _ _ _ _ _)
2698  * (_ _ _ _ _ * * _ _ _ _ _ * _ _ _ _ _ _ _ * * *)
2699  * (_ _ _ _ * _ _ _ _ _ _ _ * * * _ _ _ * * _ _ _)
2700  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
2701  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _)
2702  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2703  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2704  */
2705  const int g42[] = {
2706  // Width and height of crossword grid
2707  23, 23,
2708  // Number of black fields
2709  89,
2710  // Black field coordinates
2711  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,
2712  // Length and number of words of that length
2713  13, 2,
2714  // Coordinates where words start and direction (0 = horizontal)
2715  8,10,1, 14,0,1,
2716  // Length and number of words of that length
2717  12, 2,
2718  // Coordinates where words start and direction (0 = horizontal)
2719  0,2,0, 11,20,0,
2720  // Length and number of words of that length
2721  11, 2,
2722  // Coordinates where words start and direction (0 = horizontal)
2723  5,0,1, 17,12,1,
2724  // Length and number of words of that length
2725  10, 4,
2726  // Coordinates where words start and direction (0 = horizontal)
2727  0,20,0, 2,6,1, 13,2,0, 20,7,1,
2728  // Length and number of words of that length
2729  9, 2,
2730  // Coordinates where words start and direction (0 = horizontal)
2731  5,13,0, 9,9,0,
2732  // Length and number of words of that length
2733  8, 2,
2734  // Coordinates where words start and direction (0 = horizontal)
2735  5,8,0, 10,14,0,
2736  // Length and number of words of that length
2737  7, 10,
2738  // Coordinates where words start and direction (0 = horizontal)
2739  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,
2740  // Length and number of words of that length
2741  6, 24,
2742  // Coordinates where words start and direction (0 = horizontal)
2743  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,
2744  // Length and number of words of that length
2745  5, 42,
2746  // Coordinates where words start and direction (0 = horizontal)
2747  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,
2748  // Length and number of words of that length
2749  4, 58,
2750  // Coordinates where words start and direction (0 = horizontal)
2751  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,
2752  // Length and number of words of that length
2753  3, 26,
2754  // Coordinates where words start and direction (0 = horizontal)
2755  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,
2756  // End marker
2757  0
2758  };
2759 
2760 
2761  /*
2762  * Name: 23.04, 23 x 23
2763  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2764  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2765  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2766  * (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
2767  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2768  * (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
2769  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _ _)
2770  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2771  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
2772  * (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
2773  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _)
2774  * (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
2775  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _)
2776  * (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
2777  * (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2778  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2779  * (_ _ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2780  * (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
2781  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2782  * (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
2783  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2784  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2785  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2786  */
2787  const int g43[] = {
2788  // Width and height of crossword grid
2789  23, 23,
2790  // Number of black fields
2791  80,
2792  // Black field coordinates
2793  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,
2794  // Length and number of words of that length
2795  9, 8,
2796  // Coordinates where words start and direction (0 = horizontal)
2797  0,3,0, 0,19,0, 3,0,1, 3,14,1, 14,3,0, 14,19,0, 19,0,1, 19,14,1,
2798  // Length and number of words of that length
2799  8, 12,
2800  // Coordinates where words start and direction (0 = horizontal)
2801  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,
2802  // Length and number of words of that length
2803  7, 14,
2804  // Coordinates where words start and direction (0 = horizontal)
2805  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,
2806  // Length and number of words of that length
2807  6, 12,
2808  // Coordinates where words start and direction (0 = horizontal)
2809  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,
2810  // Length and number of words of that length
2811  5, 84,
2812  // Coordinates where words start and direction (0 = horizontal)
2813  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,
2814  // Length and number of words of that length
2815  4, 20,
2816  // Coordinates where words start and direction (0 = horizontal)
2817  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,
2818  // Length and number of words of that length
2819  3, 20,
2820  // Coordinates where words start and direction (0 = horizontal)
2821  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,
2822  // End marker
2823  0
2824  };
2825 
2826 
2827  /*
2828  * Name: 23.05, 23 x 23
2829  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2830  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2831  * (_ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2832  * (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
2833  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2834  * (* * * _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ * * *)
2835  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2836  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
2837  * (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
2838  * (_ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _ _)
2839  * (_ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2840  * (* * * _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ * * *)
2841  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _)
2842  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ _ _)
2843  * (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
2844  * (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2845  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2846  * (* * * _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ * * *)
2847  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2848  * (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
2849  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _)
2850  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2851  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2852  */
2853  const int g44[] = {
2854  // Width and height of crossword grid
2855  23, 23,
2856  // Number of black fields
2857  84,
2858  // Black field coordinates
2859  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,
2860  // Length and number of words of that length
2861  11, 2,
2862  // Coordinates where words start and direction (0 = horizontal)
2863  0,2,0, 12,20,0,
2864  // Length and number of words of that length
2865  9, 6,
2866  // Coordinates where words start and direction (0 = horizontal)
2867  0,13,0, 7,11,0, 9,14,1, 11,7,1, 13,0,1, 14,9,0,
2868  // Length and number of words of that length
2869  8, 4,
2870  // Coordinates where words start and direction (0 = horizontal)
2871  0,9,0, 9,0,1, 13,15,1, 15,13,0,
2872  // Length and number of words of that length
2873  7, 20,
2874  // Coordinates where words start and direction (0 = horizontal)
2875  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,
2876  // Length and number of words of that length
2877  5, 80,
2878  // Coordinates where words start and direction (0 = horizontal)
2879  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,
2880  // Length and number of words of that length
2881  4, 38,
2882  // Coordinates where words start and direction (0 = horizontal)
2883  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,
2884  // Length and number of words of that length
2885  3, 30,
2886  // Coordinates where words start and direction (0 = horizontal)
2887  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,
2888  // End marker
2889  0
2890  };
2891 
2892 
2893  /*
2894  * Name: 23.06, 23 x 23
2895  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2896  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2897  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2898  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _)
2899  * (_ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _)
2900  * (_ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2901  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2902  * (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
2903  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _)
2904  * (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
2905  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _)
2906  * (_ _ _ _ * _ _ _ _ _ * * * _ _ _ _ _ * _ _ _ _)
2907  * (_ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
2908  * (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
2909  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _)
2910  * (* * * _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ * * *)
2911  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2912  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _)
2913  * (_ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _)
2914  * (_ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
2915  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2916  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2917  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2918  */
2919  const int g45[] = {
2920  // Width and height of crossword grid
2921  23, 23,
2922  // Number of black fields
2923  69,
2924  // Black field coordinates
2925  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,
2926  // Length and number of words of that length
2927  9, 12,
2928  // Coordinates where words start and direction (0 = horizontal)
2929  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,
2930  // Length and number of words of that length
2931  8, 12,
2932  // Coordinates where words start and direction (0 = horizontal)
2933  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,
2934  // Length and number of words of that length
2935  7, 44,
2936  // Coordinates where words start and direction (0 = horizontal)
2937  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,
2938  // Length and number of words of that length
2939  6, 24,
2940  // Coordinates where words start and direction (0 = horizontal)
2941  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,
2942  // Length and number of words of that length
2943  5, 24,
2944  // Coordinates where words start and direction (0 = horizontal)
2945  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,
2946  // Length and number of words of that length
2947  4, 24,
2948  // Coordinates where words start and direction (0 = horizontal)
2949  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,
2950  // Length and number of words of that length
2951  3, 16,
2952  // Coordinates where words start and direction (0 = horizontal)
2953  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,
2954  // End marker
2955  0
2956  };
2957 
2958 
2959  /*
2960  * Name: 23.07, 23 x 23
2961  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ *)
2962  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2963  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _)
2964  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
2965  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _)
2966  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2967  * (_ _ _ _ _ * _ _ _ _ * * _ _ _ _ * _ _ _ * * *)
2968  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
2969  * (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
2970  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _)
2971  * (* * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
2972  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
2973  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * *)
2974  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _)
2975  * (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
2976  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ * _ _ _ _)
2977  * (* * * _ _ _ * _ _ _ _ * * _ _ _ _ * _ _ _ _ _)
2978  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
2979  * (_ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
2980  * (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
2981  * (_ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _)
2982  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2983  * (* _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
2984  */
2985  const int g46[] = {
2986  // Width and height of crossword grid
2987  23, 23,
2988  // Number of black fields
2989  83,
2990  // Black field coordinates
2991  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,
2992  // Length and number of words of that length
2993  12, 2,
2994  // Coordinates where words start and direction (0 = horizontal)
2995  0,20,0, 11,2,0,
2996  // Length and number of words of that length
2997  11, 2,
2998  // Coordinates where words start and direction (0 = horizontal)
2999  2,5,1, 20,7,1,
3000  // Length and number of words of that length
3001  10, 6,
3002  // Coordinates where words start and direction (0 = horizontal)
3003  0,2,0, 5,7,0, 7,5,1, 8,15,0, 13,20,0, 15,8,1,
3004  // Length and number of words of that length
3005  9, 4,
3006  // Coordinates where words start and direction (0 = horizontal)
3007  5,13,0, 9,9,0, 9,9,1, 13,5,1,
3008  // Length and number of words of that length
3009  8, 8,
3010  // Coordinates where words start and direction (0 = horizontal)
3011  0,3,0, 0,9,0, 3,0,1, 9,0,1, 13,15,1, 15,13,0, 15,19,0, 19,15,1,
3012  // Length and number of words of that length
3013  7, 4,
3014  // Coordinates where words start and direction (0 = horizontal)
3015  0,15,0, 7,16,1, 15,0,1, 16,7,0,
3016  // Length and number of words of that length
3017  6, 14,
3018  // Coordinates where words start and direction (0 = horizontal)
3019  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,
3020  // Length and number of words of that length
3021  5, 54,
3022  // Coordinates where words start and direction (0 = horizontal)
3023  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,
3024  // Length and number of words of that length
3025  4, 64,
3026  // Coordinates where words start and direction (0 = horizontal)
3027  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,
3028  // Length and number of words of that length
3029  3, 16,
3030  // Coordinates where words start and direction (0 = horizontal)
3031  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,
3032  // End marker
3033  0
3034  };
3035 
3036 
3037  /*
3038  * Name: 23.08, 23 x 23
3039  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3040  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3041  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3042  * (_ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _)
3043  * (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
3044  * (_ _ _ _ _ * _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _)
3045  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
3046  * (* * * _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * * *)
3047  * (_ _ _ * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
3048  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
3049  * (_ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
3050  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
3051  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _)
3052  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
3053  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _)
3054  * (* * * _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ * * *)
3055  * (_ _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _ _ _ _)
3056  * (_ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ * _ _ _ _ _)
3057  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
3058  * (_ _ _ * _ _ _ _ _ * _ _ _ _ * _ _ _ _ * _ _ _)
3059  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3060  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3061  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3062  */
3063  const int g47[] = {
3064  // Width and height of crossword grid
3065  23, 23,
3066  // Number of black fields
3067  75,
3068  // Black field coordinates
3069  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,
3070  // Length and number of words of that length
3071  8, 4,
3072  // Coordinates where words start and direction (0 = horizontal)
3073  0,14,0, 8,15,1, 14,0,1, 15,8,0,
3074  // Length and number of words of that length
3075  7, 44,
3076  // Coordinates where words start and direction (0 = horizontal)
3077  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,
3078  // Length and number of words of that length
3079  6, 24,
3080  // Coordinates where words start and direction (0 = horizontal)
3081  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,
3082  // Length and number of words of that length
3083  5, 40,
3084  // Coordinates where words start and direction (0 = horizontal)
3085  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,
3086  // Length and number of words of that length
3087  4, 44,
3088  // Coordinates where words start and direction (0 = horizontal)
3089  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,
3090  // Length and number of words of that length
3091  3, 16,
3092  // Coordinates where words start and direction (0 = horizontal)
3093  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,
3094  // End marker
3095  0
3096  };
3097 
3098 
3099  /*
3100  * Name: 23.09, 23 x 23
3101  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
3102  * (_ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
3103  * (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _)
3104  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
3105  * (_ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _)
3106  * (* * * _ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ *)
3107  * (_ _ _ * _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3108  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ _ _ _)
3109  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
3110  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _)
3111  * (_ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _)
3112  * (* * _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ * *)
3113  * (_ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _)
3114  * (_ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
3115  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
3116  * (_ _ _ _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _ _)
3117  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ * _ _ _)
3118  * (* _ _ _ * _ _ _ * _ _ _ _ _ * _ _ _ _ _ * * *)
3119  * (_ _ _ * _ _ _ _ _ * _ _ _ * _ _ _ * _ _ _ _ _)
3120  * (_ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
3121  * (_ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
3122  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _)
3123  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
3124  */
3125  const int g48[] = {
3126  // Width and height of crossword grid
3127  23, 23,
3128  // Number of black fields
3129  76,
3130  // Black field coordinates
3131  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,
3132  // Length and number of words of that length
3133  17, 4,
3134  // Coordinates where words start and direction (0 = horizontal)
3135  0,2,0, 2,6,1, 6,20,0, 20,0,1,
3136  // Length and number of words of that length
3137  11, 4,
3138  // Coordinates where words start and direction (0 = horizontal)
3139  0,1,0, 1,12,1, 12,21,0, 21,0,1,
3140  // Length and number of words of that length
3141  7, 16,
3142  // Coordinates where words start and direction (0 = horizontal)
3143  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,
3144  // Length and number of words of that length
3145  6, 16,
3146  // Coordinates where words start and direction (0 = horizontal)
3147  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,
3148  // Length and number of words of that length
3149  5, 86,
3150  // Coordinates where words start and direction (0 = horizontal)
3151  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,
3152  // Length and number of words of that length
3153  4, 12,
3154  // Coordinates where words start and direction (0 = horizontal)
3155  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,
3156  // Length and number of words of that length
3157  3, 36,
3158  // Coordinates where words start and direction (0 = horizontal)
3159  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,
3160  // End marker
3161  0
3162  };
3163 
3164 
3165  /*
3166  * Name: 23.10, 23 x 23
3167  * (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ * _ _ _ _ _)
3168  * (_ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
3169  * (_ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _)
3170  * (_ _ _ * _ _ _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
3171  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
3172  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ *)
3173  * (* * _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _)
3174  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3175  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
3176  * (_ _ _ _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ * * *)
3177  * (_ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _)
3178  * (_ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _)
3179  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _)
3180  * (* * * _ _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _)
3181  * (_ _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ _ _ _)
3182  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3183  * (_ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ * *)
3184  * (* _ _ _ * _ _ _ _ _ _ _ * _ _ _ _ _ * _ _ _ _)
3185  * (_ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _ * _ _ _ _ _)
3186  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ * _ _ _)
3187  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _)
3188  * (_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
3189  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _ _ * _ _ _ _ _ _)
3190  */
3191  const int g49[] = {
3192  // Width and height of crossword grid
3193  23, 23,
3194  // Number of black fields
3195  67,
3196  // Black field coordinates
3197  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,
3198  // Length and number of words of that length
3199  13, 4,
3200  // Coordinates where words start and direction (0 = horizontal)
3201  0,2,0, 2,0,1, 10,20,0, 20,10,1,
3202  // Length and number of words of that length
3203  9, 16,
3204  // Coordinates where words start and direction (0 = horizontal)
3205  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,
3206  // Length and number of words of that length
3207  8, 12,
3208  // Coordinates where words start and direction (0 = horizontal)
3209  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,
3210  // Length and number of words of that length
3211  7, 16,
3212  // Coordinates where words start and direction (0 = horizontal)
3213  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,
3214  // Length and number of words of that length
3215  6, 40,
3216  // Coordinates where words start and direction (0 = horizontal)
3217  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,
3218  // Length and number of words of that length
3219  5, 32,
3220  // Coordinates where words start and direction (0 = horizontal)
3221  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,
3222  // Length and number of words of that length
3223  4, 12,
3224  // Coordinates where words start and direction (0 = horizontal)
3225  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,
3226  // Length and number of words of that length
3227  3, 24,
3228  // Coordinates where words start and direction (0 = horizontal)
3229  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,
3230  // End marker
3231  0
3232  };
3233 
3234 
3235  /*
3236  * Name: puzzle01, 2 x 2
3237  * (_ *)
3238  * (_ _)
3239  */
3240  const int g50[] = {
3241  // Width and height of crossword grid
3242  2, 2,
3243  // Number of black fields
3244  1,
3245  // Black field coordinates
3246  1,0,
3247  // Length and number of words of that length
3248  2, 2,
3249  // Coordinates where words start and direction (0 = horizontal)
3250  0,0,1, 0,1,0,
3251  // Length and number of words of that length
3252  1, 2,
3253  // Coordinates where words start and direction (0 = horizontal)
3254  0,0,0, 1,1,1,
3255  // End marker
3256  0
3257  };
3258 
3259 
3260  /*
3261  * Name: puzzle02, 3 x 3
3262  * (* _ _)
3263  * (_ _ _)
3264  * (_ _ _)
3265  */
3266  const int g51[] = {
3267  // Width and height of crossword grid
3268  3, 3,
3269  // Number of black fields
3270  1,
3271  // Black field coordinates
3272  0,0,
3273  // Length and number of words of that length
3274  3, 4,
3275  // Coordinates where words start and direction (0 = horizontal)
3276  0,1,0, 0,2,0, 1,0,1, 2,0,1,
3277  // Length and number of words of that length
3278  2, 2,
3279  // Coordinates where words start and direction (0 = horizontal)
3280  0,1,1, 1,0,0,
3281  // End marker
3282  0
3283  };
3284 
3285 
3286  /*
3287  * Name: puzzle03, 4 x 4
3288  * (_ _ _ *)
3289  * (_ _ _ _)
3290  * (_ _ _ _)
3291  * (* _ _ _)
3292  */
3293  const int g52[] = {
3294  // Width and height of crossword grid
3295  4, 4,
3296  // Number of black fields
3297  2,
3298  // Black field coordinates
3299  0,3, 3,0,
3300  // Length and number of words of that length
3301  4, 4,
3302  // Coordinates where words start and direction (0 = horizontal)
3303  0,1,0, 0,2,0, 1,0,1, 2,0,1,
3304  // Length and number of words of that length
3305  3, 4,
3306  // Coordinates where words start and direction (0 = horizontal)
3307  0,0,0, 0,0,1, 1,3,0, 3,1,1,
3308  // End marker
3309  0
3310  };
3311 
3312 
3313  /*
3314  * Name: puzzle04, 5 x 5
3315  * (_ _ _ * *)
3316  * (_ _ _ _ *)
3317  * (_ _ _ _ _)
3318  * (* _ _ _ _)
3319  * (* * _ _ _)
3320  */
3321  const int g53[] = {
3322  // Width and height of crossword grid
3323  5, 5,
3324  // Number of black fields
3325  6,
3326  // Black field coordinates
3327  0,3, 0,4, 1,4, 3,0, 4,0, 4,1,
3328  // Length and number of words of that length
3329  5, 2,
3330  // Coordinates where words start and direction (0 = horizontal)
3331  0,2,0, 2,0,1,
3332  // Length and number of words of that length
3333  4, 4,
3334  // Coordinates where words start and direction (0 = horizontal)
3335  0,1,0, 1,0,1, 1,3,0, 3,1,1,
3336  // Length and number of words of that length
3337  3, 4,
3338  // Coordinates where words start and direction (0 = horizontal)
3339  0,0,0, 0,0,1, 2,4,0, 4,2,1,
3340  // End marker
3341  0
3342  };
3343 
3344 
3345  /*
3346  * Name: puzzle05, 5 x 5
3347  * (_ _ _ _ *)
3348  * (_ _ _ * _)
3349  * (_ _ _ _ _)
3350  * (_ * _ _ _)
3351  * (* _ _ _ _)
3352  */
3353  const int g54[] = {
3354  // Width and height of crossword grid
3355  5, 5,
3356  // Number of black fields
3357  4,
3358  // Black field coordinates
3359  0,4, 1,3, 3,1, 4,0,
3360  // Length and number of words of that length
3361  5, 2,
3362  // Coordinates where words start and direction (0 = horizontal)
3363  0,2,0, 2,0,1,
3364  // Length and number of words of that length
3365  4, 4,
3366  // Coordinates where words start and direction (0 = horizontal)
3367  0,0,0, 0,0,1, 1,4,0, 4,1,1,
3368  // Length and number of words of that length
3369  3, 4,
3370  // Coordinates where words start and direction (0 = horizontal)
3371  0,1,0, 1,0,1, 2,3,0, 3,2,1,
3372  // Length and number of words of that length
3373  1, 4,
3374  // Coordinates where words start and direction (0 = horizontal)
3375  0,3,0, 1,4,1, 3,0,1, 4,1,0,
3376  // End marker
3377  0
3378  };
3379 
3380 
3381  /*
3382  * Name: puzzle06, 5 x 5
3383  * (_ _ _ _ _)
3384  * (_ _ _ * _)
3385  * (_ _ _ _ _)
3386  * (_ * _ _ _)
3387  * (_ _ _ _ _)
3388  */
3389  const int g55[] = {
3390  // Width and height of crossword grid
3391  5, 5,
3392  // Number of black fields
3393  2,
3394  // Black field coordinates
3395  1,3, 3,1,
3396  // Length and number of words of that length
3397  5, 6,
3398  // Coordinates where words start and direction (0 = horizontal)
3399  0,0,0, 0,0,1, 0,2,0, 0,4,0, 2,0,1, 4,0,1,
3400  // Length and number of words of that length
3401  3, 4,
3402  // Coordinates where words start and direction (0 = horizontal)
3403  0,1,0, 1,0,1, 2,3,0, 3,2,1,
3404  // Length and number of words of that length
3405  1, 4,
3406  // Coordinates where words start and direction (0 = horizontal)
3407  0,3,0, 1,4,1, 3,0,1, 4,1,0,
3408  // End marker
3409  0
3410  };
3411 
3412 
3413  /*
3414  * Name: puzzle07, 6 x 6
3415  * (_ _ _ _ _ *)
3416  * (_ * _ _ _ _)
3417  * (_ _ _ * _ _)
3418  * (_ _ * _ _ _)
3419  * (_ _ _ _ * _)
3420  * (* _ _ _ _ _)
3421  */
3422  const int g56[] = {
3423  // Width and height of crossword grid
3424  6, 6,
3425  // Number of black fields
3426  6,
3427  // Black field coordinates
3428  0,5, 1,1, 2,3, 3,2, 4,4, 5,0,
3429  // Length and number of words of that length
3430  5, 4,
3431  // Coordinates where words start and direction (0 = horizontal)
3432  0,0,0, 0,0,1, 1,5,0, 5,1,1,
3433  // Length and number of words of that length
3434  4, 4,
3435  // Coordinates where words start and direction (0 = horizontal)
3436  0,4,0, 1,2,1, 2,1,0, 4,0,1,
3437  // Length and number of words of that length
3438  3, 4,
3439  // Coordinates where words start and direction (0 = horizontal)
3440  0,2,0, 2,0,1, 3,3,0, 3,3,1,
3441  // Length and number of words of that length
3442  2, 4,
3443  // Coordinates where words start and direction (0 = horizontal)
3444  0,3,0, 2,4,1, 3,0,1, 4,2,0,
3445  // Length and number of words of that length
3446  1, 4,
3447  // Coordinates where words start and direction (0 = horizontal)
3448  0,1,0, 1,0,1, 4,5,1, 5,4,0,
3449  // End marker
3450  0
3451  };
3452 
3453 
3454  /*
3455  * Name: puzzle08, 7 x 7
3456  * (_ _ _ _ * _ _)
3457  * (_ _ _ * _ _ _)
3458  * (_ _ * _ _ _ *)
3459  * (_ _ _ _ _ _ _)
3460  * (* _ _ _ * _ _)
3461  * (_ _ _ * _ _ _)
3462  * (_ _ * _ _ _ _)
3463  */
3464  const int g57[] = {
3465  // Width and height of crossword grid
3466  7, 7,
3467  // Number of black fields
3468  8,
3469  // Black field coordinates
3470  0,4, 2,2, 2,6, 3,1, 3,5, 4,0, 4,4, 6,2,
3471  // Length and number of words of that length
3472  7, 3,
3473  // Coordinates where words start and direction (0 = horizontal)
3474  0,3,0, 1,0,1, 5,0,1,
3475  // Length and number of words of that length
3476  4, 4,
3477  // Coordinates where words start and direction (0 = horizontal)
3478  0,0,0, 0,0,1, 3,6,0, 6,3,1,
3479  // Length and number of words of that length
3480  3, 9,
3481  // Coordinates where words start and direction (0 = horizontal)
3482  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,
3483  // Length and number of words of that length
3484  2, 8,
3485  // Coordinates where words start and direction (0 = horizontal)
3486  0,2,0, 0,5,1, 0,6,0, 2,0,1, 4,5,1, 5,0,0, 5,4,0, 6,0,1,
3487  // Length and number of words of that length
3488  1, 2,
3489  // Coordinates where words start and direction (0 = horizontal)
3490  3,0,1, 3,6,1,
3491  // End marker
3492  0
3493  };
3494 
3495 
3496  /*
3497  * Name: puzzle09, 7 x 7
3498  * (* * _ _ _ * *)
3499  * (* _ _ _ _ _ *)
3500  * (_ _ _ * _ _ _)
3501  * (_ _ _ _ _ _ _)
3502  * (_ _ _ * _ _ _)
3503  * (* _ _ _ _ _ *)
3504  * (* * _ _ _ * *)
3505  */
3506  const int g58[] = {
3507  // Width and height of crossword grid
3508  7, 7,
3509  // Number of black fields
3510  14,
3511  // Black field coordinates
3512  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,
3513  // Length and number of words of that length
3514  7, 3,
3515  // Coordinates where words start and direction (0 = horizontal)
3516  0,3,0, 2,0,1, 4,0,1,
3517  // Length and number of words of that length
3518  5, 4,
3519  // Coordinates where words start and direction (0 = horizontal)
3520  1,1,0, 1,1,1, 1,5,0, 5,1,1,
3521  // Length and number of words of that length
3522  3, 8,
3523  // Coordinates where words start and direction (0 = horizontal)
3524  0,2,0, 0,2,1, 0,4,0, 2,0,0, 2,6,0, 4,2,0, 4,4,0, 6,2,1,
3525  // Length and number of words of that length
3526  2, 2,
3527  // Coordinates where words start and direction (0 = horizontal)
3528  3,0,1, 3,5,1,
3529  // Length and number of words of that length
3530  1, 1,
3531  // Coordinates where words start and direction (0 = horizontal)
3532  3,3,1,
3533  // End marker
3534  0
3535  };
3536 
3537 
3538  /*
3539  * Name: puzzle10, 7 x 7
3540  * (_ _ _ * _ _ _)
3541  * (_ _ _ * _ _ _)
3542  * (_ _ _ _ _ _ _)
3543  * (* * _ * _ * *)
3544  * (_ _ _ _ _ _ _)
3545  * (_ _ _ * _ _ _)
3546  * (_ _ _ * _ _ _)
3547  */
3548  const int g59[] = {
3549  // Width and height of crossword grid
3550  7, 7,
3551  // Number of black fields
3552  9,
3553  // Black field coordinates
3554  0,3, 1,3, 3,0, 3,1, 3,3, 3,5, 3,6, 5,3, 6,3,
3555  // Length and number of words of that length
3556  7, 4,
3557  // Coordinates where words start and direction (0 = horizontal)
3558  0,2,0, 0,4,0, 2,0,1, 4,0,1,
3559  // Length and number of words of that length
3560  3, 16,
3561  // Coordinates where words start and direction (0 = horizontal)
3562  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,
3563  // Length and number of words of that length
3564  1, 4,
3565  // Coordinates where words start and direction (0 = horizontal)
3566  2,3,0, 3,2,1, 3,4,1, 4,3,0,
3567  // End marker
3568  0
3569  };
3570 
3571 
3572  /*
3573  * Name: puzzle11, 7 x 7
3574  * (* * _ _ _ _ *)
3575  * (* _ _ _ _ _ _)
3576  * (_ _ _ * _ _ _)
3577  * (_ _ _ * _ _ _)
3578  * (_ _ _ * _ _ _)
3579  * (_ _ _ _ _ _ *)
3580  * (* _ _ _ _ * *)
3581  */
3582  const int g60[] = {
3583  // Width and height of crossword grid
3584  7, 7,
3585  // Number of black fields
3586  11,
3587  // Black field coordinates
3588  0,0, 0,1, 0,6, 1,0, 3,2, 3,3, 3,4, 5,6, 6,0, 6,5, 6,6,
3589  // Length and number of words of that length
3590  7, 2,
3591  // Coordinates where words start and direction (0 = horizontal)
3592  2,0,1, 4,0,1,
3593  // Length and number of words of that length
3594  6, 4,
3595  // Coordinates where words start and direction (0 = horizontal)
3596  0,5,0, 1,1,0, 1,1,1, 5,0,1,
3597  // Length and number of words of that length
3598  4, 4,
3599  // Coordinates where words start and direction (0 = horizontal)
3600  0,2,1, 1,6,0, 2,0,0, 6,1,1,
3601  // Length and number of words of that length
3602  3, 6,
3603  // Coordinates where words start and direction (0 = horizontal)
3604  0,2,0, 0,3,0, 0,4,0, 4,2,0, 4,3,0, 4,4,0,
3605  // Length and number of words of that length
3606  2, 2,
3607  // Coordinates where words start and direction (0 = horizontal)
3608  3,0,1, 3,5,1,
3609  // End marker
3610  0
3611  };
3612 
3613 
3614  /*
3615  * Name: puzzle12, 8 x 8
3616  * (_ _ _ _ * _ _ _)
3617  * (_ _ _ _ * _ _ _)
3618  * (_ _ _ _ * _ _ _)
3619  * (* * * _ _ _ _ _)
3620  * (_ _ _ _ _ * * *)
3621  * (_ _ _ * _ _ _ _)
3622  * (_ _ _ * _ _ _ _)
3623  * (_ _ _ * _ _ _ _)
3624  */
3625  const int g61[] = {
3626  // Width and height of crossword grid
3627  8, 8,
3628  // Number of black fields
3629  12,
3630  // Black field coordinates
3631  0,3, 1,3, 2,3, 3,5, 3,6, 3,7, 4,0, 4,1, 4,2, 5,4, 6,4, 7,4,
3632  // Length and number of words of that length
3633  5, 4,
3634  // Coordinates where words start and direction (0 = horizontal)
3635  0,4,0, 3,0,1, 3,3,0, 4,3,1,
3636  // Length and number of words of that length
3637  4, 12,
3638  // Coordinates where words start and direction (0 = horizontal)
3639  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,
3640  // Length and number of words of that length
3641  3, 12,
3642  // Coordinates where words start and direction (0 = horizontal)
3643  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,
3644  // End marker
3645  0
3646  };
3647 
3648 
3649  /*
3650  * Name: puzzle13, 9 x 9
3651  * (_ _ _ _ * _ _ _ _)
3652  * (_ _ _ _ * _ _ _ _)
3653  * (_ _ _ * * * _ _ _)
3654  * (_ _ _ _ _ _ _ _ _)
3655  * (* * * _ _ _ * * *)
3656  * (_ _ _ _ _ _ _ _ _)
3657  * (_ _ _ * * * _ _ _)
3658  * (_ _ _ _ * _ _ _ _)
3659  * (_ _ _ _ * _ _ _ _)
3660  */
3661  const int g62[] = {
3662  // Width and height of crossword grid
3663  9, 9,
3664  // Number of black fields
3665  16,
3666  // Black field coordinates
3667  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,
3668  // Length and number of words of that length
3669  9, 2,
3670  // Coordinates where words start and direction (0 = horizontal)
3671  0,3,0, 0,5,0,
3672  // Length and number of words of that length
3673  4, 20,
3674  // Coordinates where words start and direction (0 = horizontal)
3675  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,
3676  // Length and number of words of that length
3677  3, 8,
3678  // Coordinates where words start and direction (0 = horizontal)
3679  0,2,0, 0,6,0, 3,3,1, 3,4,0, 4,3,1, 5,3,1, 6,2,0, 6,6,0,
3680  // Length and number of words of that length
3681  2, 4,
3682  // Coordinates where words start and direction (0 = horizontal)
3683  3,0,1, 3,7,1, 5,0,1, 5,7,1,
3684  // End marker
3685  0
3686  };
3687 
3688 
3689  /*
3690  * Name: puzzle14, 10 x 10
3691  * (* * * _ _ _ _ * * *)
3692  * (* * _ _ _ _ _ * * *)
3693  * (* _ _ _ _ _ _ _ * *)
3694  * (_ _ _ _ _ * * _ _ _)
3695  * (_ _ _ _ * * * _ _ _)
3696  * (_ _ _ * * * _ _ _ _)
3697  * (_ _ _ * * _ _ _ _ _)
3698  * (* * _ _ _ _ _ _ _ *)
3699  * (* * * _ _ _ _ _ * *)
3700  * (* * * _ _ _ _ * * *)
3701  */
3702  const int g63[] = {
3703  // Width and height of crossword grid
3704  10, 10,
3705  // Number of black fields
3706  38,
3707  // Black field coordinates
3708  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,
3709  // Length and number of words of that length
3710  7, 4,
3711  // Coordinates where words start and direction (0 = horizontal)
3712  1,2,0, 2,1,1, 2,7,0, 7,2,1,
3713  // Length and number of words of that length
3714  5, 8,
3715  // Coordinates where words start and direction (0 = horizontal)
3716  0,3,0, 1,2,1, 2,1,0, 3,0,1, 3,8,0, 5,6,0, 6,5,1, 8,3,1,
3717  // Length and number of words of that length
3718  4, 8,
3719  // Coordinates where words start and direction (0 = horizontal)
3720  0,3,1, 0,4,0, 3,0,0, 3,9,0, 4,0,1, 5,6,1, 6,5,0, 9,3,1,
3721  // Length and number of words of that length
3722  3, 8,
3723  // Coordinates where words start and direction (0 = horizontal)
3724  0,5,0, 0,6,0, 3,7,1, 4,7,1, 5,0,1, 6,0,1, 7,3,0, 7,4,0,
3725  // End marker
3726  0
3727  };
3728 
3729 
3730  /*
3731  * Name: puzzle15, 11 x 11
3732  * (_ _ _ _ * * * _ _ _ _)
3733  * (_ _ _ _ _ * _ _ _ _ _)
3734  * (_ _ _ _ _ * _ _ _ _ _)
3735  * (_ _ _ * _ _ _ * _ _ _)
3736  * (* _ _ _ _ _ * _ _ _ *)
3737  * (* * * _ _ _ _ _ * * *)
3738  * (* _ _ _ * _ _ _ _ _ *)
3739  * (_ _ _ * _ _ _ * _ _ _)
3740  * (_ _ _ _ _ * _ _ _ _ _)
3741  * (_ _ _ _ _ * _ _ _ _ _)
3742  * (_ _ _ _ * * * _ _ _ _)
3743  */
3744  const int g64[] = {
3745  // Width and height of crossword grid
3746  11, 11,
3747  // Number of black fields
3748  26,
3749  // Black field coordinates
3750  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,
3751  // Length and number of words of that length
3752  5, 22,
3753  // Coordinates where words start and direction (0 = horizontal)
3754  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,
3755  // Length and number of words of that length
3756  4, 8,
3757  // Coordinates where words start and direction (0 = horizontal)
3758  0,0,0, 0,0,1, 0,7,1, 0,10,0, 7,0,0, 7,10,0, 10,0,1, 10,7,1,
3759  // Length and number of words of that length
3760  3, 16,
3761  // Coordinates where words start and direction (0 = horizontal)
3762  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,
3763  // End marker
3764  0
3765  };
3766 
3767 
3768  /*
3769  * Name: puzzle16, 13 x 13
3770  * (_ _ _ * _ _ _ _ * _ _ _ _)
3771  * (_ _ _ * _ _ _ _ * _ _ _ _)
3772  * (_ _ _ * _ _ _ _ * _ _ _ _)
3773  * (_ _ _ _ _ _ * _ _ _ * * *)
3774  * (* * * _ _ _ * _ _ _ _ _ _)
3775  * (_ _ _ _ _ * _ _ _ * _ _ _)
3776  * (_ _ _ _ * _ _ _ * _ _ _ _)
3777  * (_ _ _ * _ _ _ * _ _ _ _ _)
3778  * (_ _ _ _ _ _ * _ _ _ * * *)
3779  * (* * * _ _ _ * _ _ _ _ _ _)
3780  * (_ _ _ _ * _ _ _ _ * _ _ _)
3781  * (_ _ _ _ * _ _ _ _ * _ _ _)
3782  * (_ _ _ _ * _ _ _ _ * _ _ _)
3783  */
3784  const int g65[] = {
3785  // Width and height of crossword grid
3786  13, 13,
3787  // Number of black fields
3788  34,
3789  // Black field coordinates
3790  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,
3791  // Length and number of words of that length
3792  7, 2,
3793  // Coordinates where words start and direction (0 = horizontal)
3794  5,6,1, 7,0,1,
3795  // Length and number of words of that length
3796  6, 6,
3797  // Coordinates where words start and direction (0 = horizontal)
3798  0,3,0, 0,8,0, 4,0,1, 7,4,0, 7,9,0, 8,7,1,
3799  // Length and number of words of that length
3800  5, 6,
3801  // Coordinates where words start and direction (0 = horizontal)
3802  0,5,0, 3,8,1, 5,0,1, 7,8,1, 8,7,0, 9,0,1,
3803  // Length and number of words of that length
3804  4, 28,
3805  // Coordinates where words start and direction (0 = horizontal)
3806  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,
3807  // Length and number of words of that length
3808  3, 26,
3809  // Coordinates where words start and direction (0 = horizontal)
3810  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,
3811  // End marker
3812  0
3813  };
3814 
3815 
3816  /*
3817  * Name: puzzle17, 15 x 15
3818  * (_ _ _ * _ _ _ * _ _ _ * _ _ _)
3819  * (_ _ _ * _ _ _ * _ _ _ * _ _ _)
3820  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3821  * (* * _ _ _ _ * _ _ _ _ _ _ * *)
3822  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
3823  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3824  * (_ _ _ _ _ _ _ * _ _ _ * _ _ _)
3825  * (* * * _ _ _ * * * _ _ _ * * *)
3826  * (_ _ _ * _ _ _ * _ _ _ _ _ _ _)
3827  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3828  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
3829  * (* * _ _ _ _ _ _ * _ _ _ _ * *)
3830  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3831  * (_ _ _ * _ _ _ * _ _ _ * _ _ _)
3832  * (_ _ _ * _ _ _ * _ _ _ * _ _ _)
3833  */
3834  const int g66[] = {
3835  // Width and height of crossword grid
3836  15, 15,
3837  // Number of black fields
3838  45,
3839  // Black field coordinates
3840  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,
3841  // Length and number of words of that length
3842  7, 12,
3843  // Coordinates where words start and direction (0 = horizontal)
3844  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,
3845  // Length and number of words of that length
3846  6, 4,
3847  // Coordinates where words start and direction (0 = horizontal)
3848  2,11,0, 3,2,1, 7,3,0, 11,7,1,
3849  // Length and number of words of that length
3850  5, 12,
3851  // Coordinates where words start and direction (0 = horizontal)
3852  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,
3853  // Length and number of words of that length
3854  4, 12,
3855  // Coordinates where words start and direction (0 = horizontal)
3856  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,
3857  // Length and number of words of that length
3858  3, 48,
3859  // Coordinates where words start and direction (0 = horizontal)
3860  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,
3861  // End marker
3862  0
3863  };
3864 
3865 
3866  /*
3867  * Name: puzzle18, 15 x 15
3868  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3869  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3870  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3871  * (_ _ _ _ _ * _ _ _ * * _ _ _ _)
3872  * (* * * * _ _ _ * * _ _ _ * * *)
3873  * (_ _ _ * _ _ _ * _ _ _ * _ _ _)
3874  * (_ _ _ _ * _ _ _ _ _ _ _ _ _ _)
3875  * (_ _ _ _ * * _ _ _ * * _ _ _ _)
3876  * (_ _ _ _ _ _ _ _ _ _ * _ _ _ _)
3877  * (_ _ _ * _ _ _ * _ _ _ * _ _ _)
3878  * (* * * _ _ _ * * _ _ _ * * * *)
3879  * (_ _ _ _ * * _ _ _ * _ _ _ _ _)
3880  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3881  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3882  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3883  */
3884  const int g67[] = {
3885  // Width and height of crossword grid
3886  15, 15,
3887  // Number of black fields
3888  48,
3889  // Black field coordinates
3890  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,
3891  // Length and number of words of that length
3892  10, 4,
3893  // Coordinates where words start and direction (0 = horizontal)
3894  0,8,0, 5,6,0, 6,0,1, 8,5,1,
3895  // Length and number of words of that length
3896  5, 16,
3897  // Coordinates where words start and direction (0 = horizontal)
3898  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,
3899  // Length and number of words of that length
3900  4, 36,
3901  // Coordinates where words start and direction (0 = horizontal)
3902  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,
3903  // Length and number of words of that length
3904  3, 30,
3905  // Coordinates where words start and direction (0 = horizontal)
3906  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,
3907  // End marker
3908  0
3909  };
3910 
3911 
3912  /*
3913  * Name: puzzle19, 15 x 15
3914  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3915  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3916  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3917  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3918  * (* * * _ _ _ * _ _ _ _ _ * * *)
3919  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
3920  * (_ _ _ _ * _ _ _ _ _ _ * _ _ _)
3921  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3922  * (_ _ _ * _ _ _ _ _ _ * _ _ _ _)
3923  * (_ _ _ _ _ * _ _ _ * _ _ _ _ _)
3924  * (* * * _ _ _ _ _ * _ _ _ * * *)
3925  * (_ _ _ _ _ _ _ * _ _ _ _ _ _ _)
3926  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3927  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3928  * (_ _ _ _ * _ _ _ _ _ * _ _ _ _)
3929  */
3930  const int g68[] = {
3931  // Width and height of crossword grid
3932  15, 15,
3933  // Number of black fields
3934  38,
3935  // Black field coordinates
3936  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,
3937  // Length and number of words of that length
3938  10, 2,
3939  // Coordinates where words start and direction (0 = horizontal)
3940  6,5,1, 8,0,1,
3941  // Length and number of words of that length
3942  8, 2,
3943  // Coordinates where words start and direction (0 = horizontal)
3944  3,0,1, 11,7,1,
3945  // Length and number of words of that length
3946  7, 5,
3947  // Coordinates where words start and direction (0 = horizontal)
3948  0,3,0, 0,11,0, 7,4,1, 8,3,0, 8,11,0,
3949  // Length and number of words of that length
3950  6, 4,
3951  // Coordinates where words start and direction (0 = horizontal)
3952  3,9,1, 4,8,0, 5,6,0, 11,0,1,
3953  // Length and number of words of that length
3954  5, 23,
3955  // Coordinates where words start and direction (0 = horizontal)
3956  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,
3957  // Length and number of words of that length
3958  4, 32,
3959  // Coordinates where words start and direction (0 = horizontal)
3960  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,
3961  // Length and number of words of that length
3962  3, 12,
3963  // Coordinates where words start and direction (0 = horizontal)
3964  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,
3965  // End marker
3966  0
3967  };
3968 
3969 
3970  /*
3971  * Name: puzzle20, 9 x 9
3972  * (* * * _ _ _ * * *)
3973  * (* * _ _ _ _ _ * *)
3974  * (* _ _ _ _ _ _ _ *)
3975  * (_ _ _ _ * _ _ _ _)
3976  * (_ _ _ * * * _ _ _)
3977  * (_ _ _ _ * _ _ _ _)
3978  * (* _ _ _ _ _ _ _ *)
3979  * (* * _ _ _ _ _ * *)
3980  * (* * * _ _ _ * * *)
3981  */
3982  const int g69[] = {
3983  // Width and height of crossword grid
3984  9, 9,
3985  // Number of black fields
3986  29,
3987  // Black field coordinates
3988  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,
3989  // Length and number of words of that length
3990  7, 4,
3991  // Coordinates where words start and direction (0 = horizontal)
3992  1,2,0, 1,6,0, 2,1,1, 6,1,1,
3993  // Length and number of words of that length
3994  5, 4,
3995  // Coordinates where words start and direction (0 = horizontal)
3996  1,2,1, 2,1,0, 2,7,0, 7,2,1,
3997  // Length and number of words of that length
3998  4, 8,
3999  // Coordinates where words start and direction (0 = horizontal)
4000  0,3,0, 0,5,0, 3,0,1, 3,5,1, 5,0,1, 5,3,0, 5,5,0, 5,5,1,
4001  // Length and number of words of that length
4002  3, 8,
4003  // Coordinates where words start and direction (0 = horizontal)
4004  0,3,1, 0,4,0, 3,0,0, 3,8,0, 4,0,1, 4,6,1, 6,4,0, 8,3,1,
4005  // End marker
4006  0
4007  };
4008 
4009 
4010  /*
4011  * Name: puzzle21, 13 x 13
4012  * (_ _ _ _ * _ _ _ * _ _ _ _)
4013  * (_ _ _ _ * _ _ _ * _ _ _ _)
4014  * (_ _ _ _ * _ _ _ * _ _ _ _)
4015  * (_ _ _ _ _ _ * _ _ _ _ _ _)
4016  * (* * * _ _ _ * _ _ _ * * *)
4017  * (_ _ _ _ _ * * * _ _ _ _ _)
4018  * (_ _ _ * * * * * * * _ _ _)
4019  * (_ _ _ _ _ * * * _ _ _ _ _)
4020  * (* * * _ _ _ * _ _ _ * * *)
4021  * (_ _ _ _ _ _ * _ _ _ _ _ _)
4022  * (_ _ _ _ * _ _ _ * _ _ _ _)
4023  * (_ _ _ _ * _ _ _ * _ _ _ _)
4024  * (_ _ _ _ * _ _ _ * _ _ _ _)
4025  */
4026  const int g70[] = {
4027  // Width and height of crossword grid
4028  13, 13,
4029  // Number of black fields
4030  41,
4031  // Black field coordinates
4032  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,
4033  // Length and number of words of that length
4034  6, 8,
4035  // Coordinates where words start and direction (0 = horizontal)
4036  0,3,0, 0,9,0, 3,0,1, 3,7,1, 7,3,0, 7,9,0, 9,0,1, 9,7,1,
4037  // Length and number of words of that length
4038  5, 8,
4039  // Coordinates where words start and direction (0 = horizontal)
4040  0,5,0, 0,7,0, 5,0,1, 5,8,1, 7,0,1, 7,8,1, 8,5,0, 8,7,0,
4041  // Length and number of words of that length
4042  4, 24,
4043  // Coordinates where words start and direction (0 = horizontal)
4044  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,
4045  // Length and number of words of that length
4046  3, 24,
4047  // Coordinates where words start and direction (0 = horizontal)
4048  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,
4049  // End marker
4050  0
4051  };
4052 
4053 
4054  /*
4055  * Name: puzzle22, 13 x 13
4056  * (_ _ _ _ * _ _ _ * _ _ _ _)
4057  * (_ _ _ _ * _ _ _ * _ _ _ _)
4058  * (_ _ _ _ * _ _ _ * _ _ _ _)
4059  * (_ _ _ _ _ _ _ _ _ _ _ _ _)
4060  * (* * * _ _ _ * _ _ _ * * *)
4061  * (_ _ _ _ _ * * * _ _ _ _ _)
4062  * (_ _ _ _ * * * * * _ _ _ _)
4063  * (_ _ _ _ _ * * * _ _ _ _ _)
4064  * (* * * _ _ _ * _ _ _ * * *)
4065  * (_ _ _ _ _ _ _ _ _ _ _ _ _)
4066  * (_ _ _ _ * _ _ _ * _ _ _ _)
4067  * (_ _ _ _ * _ _ _ * _ _ _ _)
4068  * (_ _ _ _ * _ _ _ * _ _ _ _)
4069  */
4070  const int g71[] = {
4071  // Width and height of crossword grid
4072  13, 13,
4073  // Number of black fields
4074  37,
4075  // Black field coordinates
4076  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,
4077  // Length and number of words of that length
4078  13, 4,
4079  // Coordinates where words start and direction (0 = horizontal)
4080  0,3,0, 0,9,0, 3,0,1, 9,0,1,
4081  // Length and number of words of that length
4082  5, 8,
4083  // Coordinates where words start and direction (0 = horizontal)
4084  0,5,0, 0,7,0, 5,0,1, 5,8,1, 7,0,1, 7,8,1, 8,5,0, 8,7,0,
4085  // Length and number of words of that length
4086  4, 28,
4087  // Coordinates where words start and direction (0 = horizontal)
4088  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,
4089  // Length and number of words of that length
4090  3, 20,
4091  // Coordinates where words start and direction (0 = horizontal)
4092  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,
4093  // End marker
4094  0
4095  };
4096 
4097 
4098  const int* grids[] = {
4099  &g0[0], &g1[0], &g2[0], &g3[0], &g4[0], &g5[0], &g6[0], &g7[0], &g8[0],
4100  &g9[0], &g10[0], &g11[0], &g12[0], &g13[0], &g14[0], &g15[0], &g16[0],
4101  &g17[0], &g18[0], &g19[0], &g20[0], &g21[0], &g22[0], &g23[0], &g24[0],
4102  &g25[0], &g26[0], &g27[0], &g28[0], &g29[0], &g30[0], &g31[0], &g32[0],
4103  &g33[0], &g34[0], &g35[0], &g36[0], &g37[0], &g38[0], &g39[0], &g40[0],
4104  &g41[0], &g42[0], &g43[0], &g44[0], &g45[0], &g46[0], &g47[0], &g48[0],
4105  &g49[0], &g50[0], &g51[0], &g52[0], &g53[0], &g54[0], &g55[0], &g56[0],
4106  &g57[0], &g58[0], &g59[0], &g60[0], &g61[0], &g62[0], &g63[0], &g64[0],
4107  &g65[0], &g66[0], &g67[0], &g68[0], &g69[0], &g70[0], &g71[0]
4108  };
4109 
4110  const unsigned int n_grids = 72;
4111 
4112 }
4113 
4114 // STATISTICS: example-any
Parse an additional file option.
Definition: scowl.hpp:41
void init(const char *fn)
Perform actual initialization.
Definition: scowl.hpp:13486
void size(unsigned int s)
Set default size.
Definition: options.hpp:590
Use one tuple-set per word.
Definition: crossword.cpp:82
Branch on the words.
Definition: crossword.cpp:89
Options for scripts with additional size parameter
Definition: driver.hh:679
IntVarBranch INT_VAR_CHB_SIZE_MAX(IntCHB c, BranchTbl tbl)
Select variable with largest CHB Q-score divided by domain size.
Definition: var.hpp:280
Branch on the letters.
Definition: crossword.cpp:93
Example: Crossword puzzle
Definition: crossword.cpp:70
const int h
Height of crossword grid.
Definition: crossword.cpp:75
void finalize(void)
Finalize tuple set.
Definition: tuple-set.hpp:159
void branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf, FloatVarValPrint vvp)
Branch over x with variable selection vars and value selection vals.
Definition: branch.cpp:43
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
Definition: array.hpp:1060
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
Definition: options.cpp:670
virtual void post(Space &home) const
Post no-goods.
Definition: core.cpp:82
virtual void print(std::ostream &os) const
Print solution.
Definition: crossword.cpp:307
Information is provided by a restart-based engine.
Definition: core.hpp:1544
Integer variable array.
Definition: int.hh:742
void ipl(IntPropLevel i)
Set default integer propagation level.
Definition: options.hpp:220
Computation spaces.
Definition: core.hpp:1668
Parametric base-class for scripts.
Definition: driver.hh:733
Use element constraints per letter.
Definition: crossword.cpp:81
Branch on the letters.
Definition: crossword.cpp:87
void decay(double d)
Set default decay factor.
Definition: options.hpp:242
Gecode::IntSet d(v, 7)
const char * word(int l, int i) const
Return word number i with length l.
Definition: scowl.hpp:13607
Crossword(const SizeOptions &opt)
Actual model.
Definition: crossword.cpp:97
Gecode::FloatVal c(-8, 8)
IntVarBranch INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count divided by domain size with decay factor d...
Definition: var.hpp:240
int words(void) const
Return total number of words.
Definition: scowl.hpp:13599
Gecode::IntArgs i(4, 1, 2, 3, 4)
Base-class for branchers.
Definition: core.hpp:1368
int n
Number of negative literals for node type.
Definition: bool-expr.cpp:238
Options opt
The options.
Definition: test.cpp:101
virtual Space * copy(void)
Copy during cloning.
Definition: crossword.cpp:302
Dictionary dict
The dictionary to be used.
Definition: scowl.hpp:99
void extensional(Home home, const IntVarArgs &x, DFA dfa, IntPropLevel)
Post domain consistent propagator for extensional constraint described by a DFA.
Definition: extensional.cpp:47
Type type(void) const
Return type of information.
Definition: core.hpp:3002
IntValBranch INT_VAL_MIN(void)
Select smallest value.
Definition: val.hpp:59
static void printwords(const Space &, const Brancher &, unsigned int a, IntVar, int i, const int &n, std::ostream &os)
Print brancher information when branching on words.
Definition: crossword.cpp:278
unsigned int size(I &i)
Size of all ranges of range iterator i.
Value propagation.
Definition: int.hh:956
void distinct(Home home, const IntVarArgs &x, IntPropLevel ipl)
Post propagator for for all .
Definition: distinct.cpp:50
int main(int argc, char *argv[])
Main-function.
Definition: crossword.cpp:331
Branch on the letters.
Definition: crossword.cpp:90
Post propagator for SetVar SetOpType SetVar SetRelType SetVar z
Definition: set.hh:769
void branching(int v)
Set default branching value.
Definition: options.hpp:229
Branch on the words.
Definition: crossword.cpp:92
const int w
Width of crossword grid.
Definition: crossword.cpp:73
Passing integer variables.
Definition: int.hh:637
Passing integer arguments.
Definition: int.hh:608
Crossword(Crossword &s)
Constructor for cloning s.
Definition: crossword.cpp:296
const NoGoods & nogoods(void) const
Return no-goods recorded from restart.
Definition: core.hpp:3026
Class represeting a set of tuples.
Definition: int.hh:2144
IntVarArray letters
Letters for grid.
Definition: crossword.cpp:77
Post propagator for SetVar SetOpType SetVar y
Definition: set.hh:769
IntValBranch INT_VALUES_MIN(void)
Try all values starting from smallest.
Definition: val.hpp:104
struct Gecode::@585::NNF::@62::@64 a
For atomic nodes.
Integer variables.
Definition: int.hh:351
bool assigned(View x, int v)
Whether x is assigned to value v.
Definition: single.hpp:47
const char * file(void) const
Return file name (NULL if none given)
Definition: scowl.hpp:13472
Post propagator for SetVar x
Definition: set.hh:769
Matrix-interface for arrays.
Definition: minimodel.hh:2052
TupleSet & add(const IntArgs &t)
Add tuple t to tuple set.
Definition: tuple-set.hpp:146
static void printletters(const Space &home, const Brancher &, unsigned int a, IntVar, int i, const int &n, std::ostream &os)
Print brancher information when branching on letters.
Definition: crossword.cpp:267
IntValBranch INT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
Definition: val.hpp:79
void model(int v)
Set default model value.
Definition: options.hpp:181
Gecode toplevel namespace
Information passed by meta search engines.
Definition: core.hpp:1539
Branch on the words.
Definition: crossword.cpp:86
bool master(const MetaInfo &mi)
Do not perform a restart when a solution is found.
Definition: crossword.cpp:287
Branch on the letters (try all values)
Definition: crossword.cpp:91
Branch on the letters (try all values)
Definition: crossword.cpp:88
Branch on the letters (try all values)
Definition: crossword.cpp:94
void element(Home home, IntSharedArray c, IntVar x0, IntVar x1, IntPropLevel)
Post domain consistent propagator for .
Definition: element.cpp:43
IntVarBranch INT_VAR_ACTION_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest action divided by domain size with decay factor d.
Definition: var.hpp:260