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