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