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