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