Generated on Sat Feb 7 2015 02:01:13 for Gecode by doxygen 1.8.9.1
sudoku.cpp
Go to the documentation of this file.
1 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2 /*
3  * Main authors:
4  * Mikael Lagerkvist <lagerkvist@gecode.org>
5  * Guido Tack <tack@gecode.org>
6  * Christian Schulte <schulte@gecode.org>
7  *
8  * Copyright:
9  * Mikael Lagerkvist, 2005
10  * Guido Tack, 2005
11  * Christian Schulte, 2005
12  *
13  * Last modified:
14  * $Date: 2013-07-08 14:22:40 +0200 (Mon, 08 Jul 2013) $ by $Author: schulte $
15  * $Revision: 13820 $
16  *
17  * This file is part of Gecode, the generic constraint
18  * development environment:
19  * http://www.gecode.org
20  *
21  * Permission is hereby granted, free of charge, to any person obtaining
22  * a copy of this software and associated documentation files (the
23  * "Software"), to deal in the Software without restriction, including
24  * without limitation the rights to use, copy, modify, merge, publish,
25  * distribute, sublicense, and/or sell copies of the Software, and to
26  * permit persons to whom the Software is furnished to do so, subject to
27  * the following conditions:
28  *
29  * The above copyright notice and this permission notice shall be
30  * included in all copies or substantial portions of the Software.
31  *
32  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
36  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
37  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
38  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39  *
40  */
41 
42 #include <gecode/driver.hh>
43 #include <gecode/int.hh>
44 #include <gecode/minimodel.hh>
45 
46 #ifdef GECODE_HAS_SET_VARS
47 #include <gecode/set.hh>
48 #endif
49 
50 #include <string>
51 #include <cmath>
52 #include <cctype>
53 
54 using namespace Gecode;
55 
56 namespace {
57  extern const char* examples[];
58  extern const unsigned int n_examples;
59  int example_size(const char *s);
60  int sudokuField(const char *s, int n, int i, int j);
61 }
62 
64 class Sudoku : public Script {
65 protected:
67  const int n;
68 public:
69 #ifdef GECODE_HAS_SET_VARS
70  enum {
74  MODEL_MIXED
75  };
76 #endif
77  // Branching variants
78  enum {
83  BRANCH_AFC
84  };
85 
87  Sudoku(const SizeOptions& opt) : n(example_size(examples[opt.size()])) {}
88 
90  Sudoku(bool share, Sudoku& s) : Script(share,s), n(s.n) {}
91 
92 };
93 
99 class SudokuInt : virtual public Sudoku {
100 protected:
103 public:
104 #ifdef GECODE_HAS_SET_VARS
105  enum {
109  };
110 #endif
111  SudokuInt(const SizeOptions& opt)
113  : Sudoku(opt), x(*this, n*n*n*n, 1, n*n) {
114  const int nn = n*n;
115  Matrix<IntVarArray> m(x, nn, nn);
116 
117  // Constraints for rows and columns
118  for (int i=0; i<nn; i++) {
119  distinct(*this, m.row(i), opt.icl());
120  distinct(*this, m.col(i), opt.icl());
121  }
122 
123  // Constraints for squares
124  for (int i=0; i<nn; i+=n) {
125  for (int j=0; j<nn; j+=n) {
126  distinct(*this, m.slice(i, i+n, j, j+n), opt.icl());
127  }
128  }
129 
130  // Fill-in predefined fields
131  for (int i=0; i<nn; i++)
132  for (int j=0; j<nn; j++)
133  if (int v = sudokuField(examples[opt.size()], nn, i, j))
134  rel(*this, m(i,j), IRT_EQ, v );
135 
136 #ifdef GECODE_HAS_SET_VARS
137  if (opt.propagation() == PROP_SAME) {
138  // Implied constraints linking squares and rows
139  for (int b=0; b<n; b++) {
140  int b1c = 0;
141  int b2c = 0;
142  IntVarArgs bc1(nn-n);
143  IntVarArgs bc2(nn-n);
144  IntVarArgs br1(nn-n);
145  IntVarArgs br2(nn-n);
146  for (int i=0; i<n; i++)
147  for (int j=0; j<n; j++) {
148  b1c = 0; b2c = 0;
149  for (int k=0; k<n; k++) {
150  if (k != j) {
151  IntVarArgs bc1s = block_col(m, b, i, k);
152  IntVarArgs br1s = block_row(m, b, i, k);
153  for (int count=0; count<n; count++) {
154  bc1[b1c] = bc1s[count];
155  br1[b1c] = br1s[count];
156  ++b1c;
157  }
158  }
159  if (k != i) {
160  IntVarArgs bc2s = block_col(m, b, k, j);
161  IntVarArgs br2s = block_row(m, b, k, j);
162  for (int count=0; count<n; count++) {
163  bc2[b2c] = bc2s[count];
164  br2[b2c] = br2s[count];
165  ++b2c;
166  }
167  }
168  }
169  same(*this, nn, bc1, bc2);
170  same(*this, nn, br1, br2);
171  }
172  }
173  }
174 #endif
175  if (opt.branching() == BRANCH_NONE) {
176  branch(*this, x, INT_VAR_NONE(), INT_VAL_SPLIT_MIN());
177  } else if (opt.branching() == BRANCH_SIZE) {
178  branch(*this, x, INT_VAR_SIZE_MIN(), INT_VAL_SPLIT_MIN());
179  } else if (opt.branching() == BRANCH_SIZE_DEGREE) {
181  } else if (opt.branching() == BRANCH_SIZE_AFC) {
182  branch(*this, x, INT_VAR_AFC_SIZE_MAX(opt.decay()), INT_VAL_SPLIT_MIN());
183  } else if (opt.branching() == BRANCH_AFC) {
184  branch(*this, x, INT_VAR_AFC_MAX(opt.decay()), INT_VAL_SPLIT_MIN());
185  }
186  }
187 
189  SudokuInt(bool share, SudokuInt& s) : Sudoku(share, s) {
190  x.update(*this, share, s.x);
191  }
192 
194  virtual Space*
195  copy(bool share) {
196  return new SudokuInt(share,*this);
197  }
198 
200  virtual void
201  print(std::ostream& os) const {
202  os << " ";
203  for (int i = 0; i<n*n*n*n; i++) {
204  if (x[i].assigned()) {
205  if (x[i].val()<10)
206  os << x[i] << " ";
207  else
208  os << (char)(x[i].val()+'A'-10) << " ";
209  }
210  else
211  os << ". ";
212  if((i+1)%(n*n) == 0)
213  os << std::endl << " ";
214  }
215  os << std::endl;
216  }
217 
218 #ifdef GECODE_HAS_SET_VARS
219 private:
221  void same(Space& home, int nn, IntVarArgs a, IntVarArgs b) {
222  SetVar u(home, IntSet::empty, 1, nn);
223  rel(home, SOT_DUNION, a, u);
224  rel(home, SOT_DUNION, b, u);
225  }
226 
228  IntVarArgs
229  block_col(Matrix<IntVarArray> m, int bc, int i, int j) {
230  return m.slice(bc*n+i, bc*n+i+1, j*n, (j+1)*n);
231  }
232 
234  IntVarArgs
235  block_row(Matrix<IntVarArray> m, int br, int i, int j) {
236  return m.slice(j*n, (j+1)*n, br*n+i, br*n+i+1);
237  }
238 #endif
239 };
240 
241 #ifdef GECODE_HAS_SET_VARS
242 
247 class SudokuSet : virtual public Sudoku {
248 protected:
251 public:
253  SudokuSet(const SizeOptions& opt)
254  : Sudoku(opt),
255  y(*this,n*n,IntSet::empty,1,n*n*n*n,n*n,n*n) {
256 
257  const int nn = n*n;
258 
259  Region r(*this);
260  IntSet* row = r.alloc<IntSet>(nn);
261  IntSet* col = r.alloc<IntSet>(nn);
262  IntSet* block = r.alloc<IntSet>(nn);
263 
264  // Set up the row and column set constants
265  int* dsc = r.alloc<int>(nn);
266  for (int i=0; i<nn; i++) {
267  row[i] = IntSet((i*nn)+1, (i+1)*nn);
268 
269  for (int j=0; j<nn; j++) {
270  dsc[j] = (j*nn)+1+i;
271  }
272  col[i] = IntSet(dsc, nn);
273  }
274 
275  // Set up the block set constants
276  int* dsb_arr = r.alloc<int>(nn);
277  for (int i=0; i<n; i++) {
278  for (int j=0; j<n; j++) {
279 
280  for (int ii=0; ii<n; ii++) {
281  for (int jj=0; jj<n; jj++) {
282  dsb_arr[ii*n+jj] = j*nn*n+i*n+jj*nn+ii+1;
283  }
284  }
285  block[i*n+j] = IntSet(dsb_arr, nn);
286  }
287  }
288 
289  IntSet full(1, nn*nn);
290  // All x must be pairwise disjoint and partition the field indices
291  rel(*this, SOT_DUNION, y, SetVar(*this, full, full));
292 
293  // The x must intersect in exactly one element with each
294  // row, column, and block
295  for (int i=0; i<nn; i++)
296  for (int j=0; j<nn; j++) {
297  SetVar inter_row(*this, IntSet::empty, full, 1, 1);
298  rel(*this, y[i], SOT_INTER, row[j], SRT_EQ, inter_row);
299  SetVar inter_col(*this, IntSet::empty, full, 1, 1);
300  rel(*this, y[i], SOT_INTER, col[j], SRT_EQ, inter_col);
301  SetVar inter_block(*this, IntSet::empty, full, 1, 1);
302  rel(*this, y[i], SOT_INTER, block[j], SRT_EQ, inter_block);
303  }
304 
305  // Fill-in predefined fields
306  for (int i=0; i<nn; i++)
307  for (int j=0; j<nn; j++)
308  if (int idx = sudokuField(examples[opt.size()], nn, i, j))
309  dom(*this, y[idx-1], SRT_SUP, (i+1)+(j*nn) );
310 
311  if (opt.branching() == BRANCH_NONE) {
312  branch(*this, y, SET_VAR_NONE(), SET_VAL_MIN_INC());
313  } else if (opt.branching() == BRANCH_SIZE) {
314  branch(*this, y, SET_VAR_SIZE_MIN(), SET_VAL_MIN_INC());
315  } else if (opt.branching() == BRANCH_SIZE_DEGREE) {
317  } else if (opt.branching() == BRANCH_SIZE_AFC) {
318  branch(*this, y, SET_VAR_AFC_SIZE_MAX(opt.decay()), SET_VAL_MIN_INC());
319  } else if (opt.branching() == BRANCH_AFC) {
320  branch(*this, y, SET_VAR_AFC_MAX(opt.decay()), SET_VAL_MIN_INC());
321  }
322  }
323 
325  SudokuSet(bool share, SudokuSet& s) : Sudoku(share,s) {
326  y.update(*this, share, s.y);
327  }
328 
330  virtual Space*
331  copy(bool share) {
332  return new SudokuSet(share,*this);
333  }
334 
336  virtual void
337  print(std::ostream& os) const {
338  os << '\t';
339  for (int i = 0; i<n*n*n*n; i++) {
340  for (int j=0; j<n*n; j++) {
341  if (y[j].contains(i+1)) {
342  if (j+1<10)
343  os << j+1 << " ";
344  else
345  os << (char)(j+1+'A'-10) << " ";
346  break;
347  }
348  }
349  if((i+1)%(n*n) == 0)
350  os << std::endl << '\t';
351  }
352  os << std::endl;
353  }
354 };
355 
356 
363 class SudokuMixed : public SudokuInt, public SudokuSet {
364 public:
367  : Sudoku(opt), SudokuInt(opt), SudokuSet(opt) {
368  const int nn = n*n;
369 
370  IntSet is0(0,0);
371  SetVar dummySet0(*this, is0, is0);
372  IntVar dummyInt0(*this, 0, 0);
373  SetVarArgs ys(nn+1);
374  ys[0] = dummySet0;
375  for (int i=0; i<nn; i++)
376  ys[i+1] = y[i];
377  IntVarArgs xs(nn*nn+1);
378  xs[0] = dummyInt0;
379  for (int i=0; i<nn*nn; i++)
380  xs[i+1] = x[i];
381 
382  channel(*this, xs, ys);
383 
384  IntArgs values(nn);
385  for (int i=nn; i--;)
386  values[i] = i+1;
387  count(*this, x, IntSet(nn,nn), values, ICL_DOM);
388  }
389 
391  SudokuMixed(bool share, SudokuMixed& s)
392  : Sudoku(share, s), SudokuInt(share, s), SudokuSet(share, s) {}
393 
395  virtual Space*
396  copy(bool share) {
397  return new SudokuMixed(share,*this);
398  }
399 
401  virtual void print(std::ostream& os) const { SudokuInt::print(os); }
402 
403 };
404 
405 #endif
406 
410 int
411 main(int argc, char* argv[]) {
412  SizeOptions opt("Sudoku");
413  opt.size(0);
414  opt.icl(ICL_DOM);
415  opt.solutions(1);
416 #ifdef GECODE_HAS_SET_VARS
418  opt.model(Sudoku::MODEL_INT, "int", "use integer constraints");
419  opt.model(Sudoku::MODEL_SET, "set", "use set constraints");
420  opt.model(Sudoku::MODEL_MIXED, "mixed",
421  "use both integer and set constraints");
423  opt.propagation(SudokuInt::PROP_NONE, "none", "no additional constraints");
424  opt.propagation(SudokuInt::PROP_SAME, "same",
425  "additional \"same\" constraint for integer model");
426 #endif
428  opt.branching(Sudoku::BRANCH_NONE, "none", "none");
429  opt.branching(Sudoku::BRANCH_SIZE, "size", "min size");
430  opt.branching(Sudoku::BRANCH_SIZE_DEGREE, "sizedeg", "min size over degree");
431  opt.branching(Sudoku::BRANCH_SIZE_AFC, "sizeafc", "min size over afc");
432  opt.branching(Sudoku::BRANCH_AFC, "afc", "maximum afc");
433  opt.parse(argc,argv);
434  if (opt.size() >= n_examples) {
435  std::cerr << "Error: size must be between 0 and "
436  << n_examples-1 << std::endl;
437  return 1;
438  }
439 #ifdef GECODE_HAS_SET_VARS
440  switch (opt.model()) {
441  case Sudoku::MODEL_INT:
442  Script::run<SudokuInt,DFS,SizeOptions>(opt);
443  break;
444  case Sudoku::MODEL_SET:
445  Script::run<SudokuSet,DFS,SizeOptions>(opt);
446  break;
447  case Sudoku::MODEL_MIXED:
448  Script::run<SudokuMixed,DFS,SizeOptions>(opt);
449  break;
450  }
451 #else
452  Script::run<SudokuInt,DFS,SizeOptions>(opt);
453 #endif
454  return 0;
455 }
456 
457 namespace {
458 
467 
469  const char* examples[] = {
470  // 0
471  "...2.5..."
472  ".9....73."
473  "..2..9.6."
474  "2.....4.9"
475  "....7...."
476  "6.9.....1"
477  ".8.4..1.."
478  ".63....8."
479  "...6.8..."
480  ,
481  // 1
482  "3..9.4..1"
483  "..2...4.."
484  ".61...79."
485  "6..247..5"
486  "........."
487  "2..836..4"
488  ".46...23."
489  "..9...6.."
490  "5..3.9..8"
491  ,
492  // 2
493  "....1...."
494  "3.14..86."
495  "9..5..2.."
496  "7..16...."
497  ".2.8.5.1."
498  "....97..4"
499  "..3..4..6"
500  ".48..69.7"
501  "....8...."
502  ,
503  // 3
504  // Fiendish puzzle April 21 2005 Times London
505  "..4..3.7."
506  ".8..7...."
507  ".7...82.5"
508  "4.....31."
509  "9.......8"
510  ".15.....4"
511  "1.69...3."
512  "....2..6."
513  ".2.4..5.."
514  ,
515  // 4
516  // This one requires search
517  ".43.8.25."
518  "6........"
519  ".....1.94"
520  "9....4.7."
521  "...6.8..."
522  ".1.2....3"
523  "82.5....."
524  "........5"
525  ".34.9.71."
526  ,
527  // 5
528  // Hard one from http://www.cs.mu.oz.au/671/proj3/node5.html
529  ".....3.6."
530  ".......1."
531  ".975...8."
532 
533  "....9.2.."
534  "..8.7.4.."
535  "..3.6...."
536 
537  ".1...289."
538  ".4......."
539  ".5.1....."
540  , // Puzzle 1 from http://www.sudoku.org.uk/bifurcation.htm
541  // 6
542  "1..9.7..3"
543  ".8.....7."
544  "..9...6.."
545  "..72.94.."
546  "41.....95"
547  "..85.43.."
548  "..3...7.."
549  ".5.....4."
550  "2..8.6..9"
551  , // Puzzle 2 from http://www.sudoku.org.uk/bifurcation.htm
552  // 7
553  "...3.2..."
554  ".5.798.3."
555  "..7...8.."
556  "..86.73.."
557  ".7.....6."
558  "..35.41.."
559  "..5...6.."
560  ".2.419.5."
561  "...8.6..."
562  , // Puzzle 3 from http://www.sudoku.org.uk/bifurcation.htm
563  // 8
564  "...8....6"
565  "..162.43."
566  "4...71..2"
567  "..72...8."
568  "....1...."
569  ".1...62.."
570  "1..73...4"
571  ".26.481.."
572  "3....5..."
573  , // Puzzle 4 from http://www.sudoku.org.uk/bifurcation.htm
574  // 9
575  "3.5..4.7."
576  ".7......1"
577  ".4.9...3."
578  "4...51..6"
579  ".9.....4."
580  "2..84...7"
581  ".2...7.6."
582  "8......9."
583  ".6.4..2.8"
584  , // Puzzle 5 from http://www.sudoku.org.uk/bifurcation.htm
585  // 10
586  "...7..3.."
587  ".6....57."
588  ".738..41."
589  "..928...."
590  "5.......9"
591  "....936.."
592  ".98..715."
593  ".54....6."
594  "..1..9..."
595  , // Puzzle 6 from http://www.sudoku.org.uk/bifurcation.htm
596  // 11
597  "...6....4"
598  ".3..9..2."
599  ".6.8..7.."
600  "..5.6...1"
601  "67.3.1.58"
602  "9...5.4.."
603  "..6..3.9."
604  ".1..8..6."
605  "2....6..."
606  , // Puzzle 7 from http://www.sudoku.org.uk/bifurcation.htm
607  // 12
608  "8....1.4."
609  "2.6.9..1."
610  "..9..6.8."
611  "124.....9"
612  "........."
613  "9.....824"
614  ".5.4..1.."
615  ".8..7.2.5"
616  ".9.5....7"
617  , // Puzzle 8 from http://www.sudoku.org.uk/bifurcation.htm
618  // 13
619  "652.48..7"
620  ".7.2.54.."
621  "........."
622  ".641...7."
623  "....8...."
624  ".8...456."
625  "........."
626  "..86.7.2."
627  "2..89.751"
628  , // Puzzle 9 from http://www.sudoku.org.uk/bifurcation.htm
629  // 14
630  "..6..2..9"
631  "1..5...2."
632  ".473.6..1"
633  ".....8.4."
634  ".3.....7."
635  ".1.6....."
636  "4..8.321."
637  ".6...1..4"
638  "3..4..9.."
639  , // Puzzle 10 from http://www.sudoku.org.uk/bifurcation.htm
640  // 15
641  "..4.5.9.."
642  "....7...6"
643  "37......2"
644  "..95...8."
645  "..12.43.."
646  ".6...92.."
647  "2......93"
648  "1...4...."
649  "..6.2.7.."
650  , // Puzzle 11 from http://www.sudoku.org.uk/bifurcation.htm
651  // 16
652  "....3.79."
653  "3.......5"
654  "...4.73.6"
655  ".53.94.7."
656  "....7...."
657  ".1.82.64."
658  "7.19.8..."
659  "8.......1"
660  ".94.1...."
661  , // From http://www.sudoku.org.uk/discus/messages/29/51.html?1131034031
662  // 17
663  "2581.4.37"
664  "936827514"
665  "47153.28."
666  "7152.3.4."
667  "849675321"
668  "36241..75"
669  "1249..753"
670  "593742168"
671  "687351492"
672  ,
673  // 18
674  // The following minimal 25*25 Sudokus are from Alain Frisch
675  // Sudoku website http://www.eleves.ens.fr/home/frisch/sudoku.html
676  "...G...9..4.....6F..L8..."
677  "CEIN.HDM.OF.1L..A..9PJ.4."
678  ".....A...L..JBN.2.D.1...H"
679  "P49...JB23.AD..7E..C5F..."
680  "A1H....F.N5....I.BL...26."
681  "....7..C.6...H4B..1....I5"
682  ".F.P...I..B..7.5.L...9..."
683  ".L6A...5OF.8P...K.NE..734"
684  "B2.E..L...1J.5....O7.K.AP"
685  "O.5.CB1.P....3EM....2L.H."
686  "2..MJ.A...9.3.7......P.8C"
687  ".....CF.DPG62N.E...OH.M.J"
688  ".DL..OM..IE.B8..NH...3..K"
689  ".CO1F.B.N.AH..P.78.JE...D"
690  "E..6.....H......4M.KIB9.."
691  "N.J..6......C..1.5.G..H.."
692  "...75LG...6..1..CI..4.E.."
693  "9K..6.....HGN.O2P.4......"
694  ".OA..IP849...2.K3...7GN.."
695  "..G....N...P.D9....A...C1"
696  "J...M.NAFE.4..23.7....8L."
697  ".....J.H9CD1LP..GO....4ME"
698  "48NK..5.M......JL.......9"
699  ".I.OG....835.A.DH..P....."
700  "35......L.J..E....8IG.67B"
701  ,
702  // 19
703  ".N..JG..O7591...8I....L.."
704  "FG.M.B8...P.E...CJ..H...."
705  "...........G.4.H.D.O.NJA2"
706  ".....J.EN4.L6MA.B.2......"
707  "HE..2..DC.....F4KMA.B.9O8"
708  "M....62...47C19......E5.."
709  ".I2.8M.JGL...ADN..K..3.F7"
710  "..H3.5..89....I.J.....NL."
711  "1B..9.FAP.6.N....537.H..O"
712  "......1..N...O...LC.68.PG"
713  "KOA.FNBH.....7.C.....M..6"
714  "45.ECP.I..N.F.J1...MK.79."
715  "I.L..8.O..9.P...A...2.1J."
716  "..621.D.M.....B8LG..P..CH"
717  ".HP.N7E.L1....3..B..O.G45"
718  "....BIO....5.C.P...FN48E."
719  "...FL.....2.DH..17..59O.."
720  "..I.MF..2G.N...A6O.HC.PB."
721  "72.1..L...IM.96E.45G....."
722  "..9...7M..A.O...I...L...."
723  ".C.JA.........1.....E.48."
724  "O.BI.......PHL.6..1....5C"
725  "G6M...N4FI8...K..H.E....."
726  ".L..4.917....BE.G8F.M.I.."
727  "8F......5.O3..4...9.....K"
728  ,
729  // 20
730  "5.PC..7..J..I...3..H.M.2L"
731  "H.......F..DA..N.G...9..P"
732  "...3LCP2.54.71.B....J.8.."
733  "76M8...3A...H..C.D.FO...."
734  "...DK..GI..B.L.6.8.14...."
735  "A......M....D.6.N.P....O2"
736  "...E5BLF..92..3AJC..6I..."
737  ".PNJ.6..E7A.8..IM.OL1.G.C"
738  ".L3...O.N.5.KI.46.....9E."
739  ".I.G.A..28.MBP...E..HJ3.7"
740  "J.74.L..D1O96.A3.M...GI.."
741  "E...1...K....J...P6.7.C.9"
742  "8M..A9JO.F.P..1...4.E3N6."
743  "...I.3.7.......EL.CD..H.."
744  "....DE2..P...N.........K."
745  ".O.7.FKI1..GJ.N.....9.P8."
746  ".89..H..BNM73D.KFJ..I.6.A"
747  "PDBN...9M..C.....O.6..7.."
748  ".F.K...4..LA9B..C.E75..GN"
749  "G.A.....7.8.....H....O.3."
750  "B...C...4......8K.3.P...."
751  "DHE5..FA...J.3..B.2.KC.98"
752  "...F...5....N..J9......I."
753  ".J...P..O.BK....I.M.3..5."
754  "9...8.B.6.D.M.I..H.5G.J4."
755  ,
756  // 21
757  "..6F.....5..3.....H..A.M2"
758  ".....3....I8.A.MC.KJ.LNG."
759  ".I.7N..K.2..6...3D..B.O85"
760  ".3A.PF.D8OBK7.2....L6.9H4"
761  ".K..CBML.....O.A8.G4.D..."
762  "1.4.AGL..M5..F.O.9....P2."
763  "..I.........8......N4E..."
764  "J.C8.1.6.3.LO.K7AG2P9.H.."
765  ".2.3BH..9.A...G......O..L"
766  ".H..M8.J.....NI1.LEF....B"
767  "I5..4.....G.27..K..3.M..H"
768  "P..E..I.A..3B.8....G.2..."
769  "AJ......NFK.I.O9476..G.1."
770  ".976...E3H....M5.F......O"
771  ".F.M3.5.GKC4.HJ.N.....ID7"
772  "..L1K..9.J37.ID..B..E6..."
773  ".82OH.1..PNML...E..C...J."
774  "....JLFN.B..G..6M..H..D.9"
775  "...C.A...I.6.......K.5..."
776  "E.G.I.....O....J.8F......"
777  "..M4..9.D.7.K.FE.3O......"
778  "H.N.....14E..B3L..8I...AG"
779  "K.O.62.PM...N..H...18C.9."
780  "LC..8.3...2...H.G...J..4E"
781  ".B..9NK.E....C6.P.4D.71OI"
782  ,
783  // 22
784  "A..F.N......M28DC.LI7..OJ"
785  "..B...D.M.6....9.....2A.."
786  ".2..I.56.B...J.MEH......."
787  "O7...HE...BA..G2........L"
788  ".H6J.2...G.7NDP.A...8..C."
789  ".PN35..B..869.2.GA..K.C.."
790  "....EM13OD.N...49K...7..."
791  "9G..C....IJF5.B..7.3....."
792  "HD.....JN....7...EF....9."
793  "1.OA..G.KL....H..B.CP...."
794  "..CE.......2..9I....3...."
795  "FJ..83P.E..K7.NL15H..I2.."
796  ".4..GJ...6DIB...P...AHL.C"
797  ".1I.2.M....83.F..4.NBE..."
798  "L3M.OD.H.AG..4.....69...F"
799  ".8...5H.3.....M...D..K..4"
800  "3..4..AEDO7J...5..9..G1.."
801  "..2N9.8F.P.OIGC.L6..E.H.."
802  "C...1.7..K.L6.4EO.8.5...N"
803  ".IG.H..M..E...1A2N4..8.F."
804  "6..5J..N1...2..H.IGA...P8"
805  ".L...O...H...C....M5G..A."
806  "..F...3C.7.P..5N..B..DMH9"
807  "291D..6..M..H.7.3.J.N..B."
808  "....MK..29F.G.DO4...6.E35"
809  ,
810  // 23
811  "....B12O3..D..F..KPL.E4.7"
812  "1M..GL..H..K.A.....39.P.."
813  ".8.3.4.....7..6.F.....CK."
814  "P.O...758.2..MC.....1L.A."
815  "...HFK6.A..8...9B...2...J"
816  "91.KJE..L.5O..GD.....4..."
817  ".I..3..D.2.....C4MLAK..N."
818  ".4..6IA.P7.....B9......3."
819  "M.F...4.J...8....N.H.1G7."
820  "..5P.N.....C.731.I.E.9A.."
821  ".....GO.KDL......BA......"
822  ".3A..F...9..K.EI5.7..6.DN"
823  ".G.54.L.....PH..3F6....2."
824  "....P.....G..2D.OH.1B...C"
825  "6.EM.7N....3.B4..DC..K1P."
826  "B.9.....I..5N...7OGK...46"
827  "OF.GD6HP..JM..BA8.I.C...."
828  "8.L7...........P.3M5...92"
829  ".EM.....45IF7....2.CJ8DL."
830  ".6.4.8..NA.2......9....GI"
831  "2..A1DCN..3G.F5.L..I..O6H"
832  "..BIO..1.H.L...G........."
833  "C.P.....M8.9O..5A..N.JK.D"
834  "H...N...FOA4..73....5..CM"
835  ".D4..3...6BE..N.2JH8..L.."
836  ,
837  // 24
838  "LJ.FH2...K....359.E.B6.N."
839  "...EML1FC.PJ.A.8I....2.K4"
840  "9........G1..6..K...PAL3C"
841  "P...C34..8.N7.........DE."
842  "...7....E..IO...124.J5.F."
843  ".8.L.PA.2..31FG....N..C.I"
844  "F.G......M........2.K..1."
845  "....2KH6.JOD..9.L..G...B."
846  ".6O3..G...4.NJ.H.PB...5.9"
847  "I...K..LBN...E.76.A....8."
848  "D.B.L......8.3.C.KM.6...."
849  ".C593.I.N4.26MB..1..L.K.."
850  "M.F6......DA45.9..N.I3..B"
851  ".G..79.H...KJ...4...AN.2."
852  ".KH...BC....LON..7..D.8.F"
853  "2..B...MP....7OEJ4....6.1"
854  ".4....2O.9......N..1....G"
855  ".....G.JF.2..L.6.5......."
856  "C9A.G...H1...PJ..L.3.8.MN"
857  "...1......M.....O.P8.K3J."
858  "...N.HP.K25G3..JC8..1M..."
859  "..2K.FC34.A....N7..9.LB.."
860  "..65DJ..L..C.4.1...BGF..."
861  "OF..E..7.B.......634...D."
862  "G.3..N.I9D7PM8KF2....4..."
863  ,
864  // 25
865  ".1..I8.P..6.N...BD...3O.."
866  ".9.6...E.M43.8..AK.2J.1.."
867  "...JKL...FA...P.I4...DB.."
868  "E...P.I.B.7.1..J.HC...98."
869  "..5M8GJ.KD.O...N3..1AI..."
870  "K.2C4.M.N..J..I.......H.5"
871  "N..B9O.D...KH6.E...C...7I"
872  "DE..JK4.....L.1B7..68PN2."
873  ".....P...C..F.7...L.O9..."
874  "...35.H......92..M.4.EC.1"
875  "P..IL..H.........1..3.D.."
876  "....B9..8.3I5.C...K...F1."
877  "FH....2O..D.4M.P...A...GC"
878  "JA.......KF.......4.EOMIP"
879  "3.7GNF...A.2OB9C.E5.HJ..."
880  "2.I.1.......AO5.P...K.3.."
881  "..H....L..M.CIJ..7...4..."
882  "GO.9..KF.I.P3...E.HJ...N7"
883  "5.37...B.E...4N..O.8....."
884  "4B...7.9O.HL..E2C3.K51.M."
885  "L.O42...D..AJ.8...GH.N..E"
886  "9M.8.H..LG1..N..5.E..F7B."
887  "......FAC..5M..I6J.B4...G"
888  "...F..82..P.E......36HK.L"
889  "B.J.G5...O.H2..98.7......"
890  ,
891  // 26
892  ".CNPHK.53.O9F..D.78..J..."
893  "J.....F.DB...7.G..PAE...L"
894  ".6.........5.4A......I..."
895  "A..L.6.E.1JG....5.H.2...9"
896  "..G4..P...E2N.M...C..FB.1"
897  "..PKJ...G41O..C.N..H....."
898  ".M..I5L97J.3H...E2.8...D."
899  "1.4..ON.83G.P.D59..C.BH.."
900  "..2.9.......4.F.3.6..O.7."
901  "3F.7.MEC..5...2..4K.LN8.."
902  "...I........MF7.6AOG..LE."
903  "C1.3..JG..D.9...4..N...68"
904  "...M7L9..NHA...FJ.I..3.C."
905  ".A...P...5...E3.8M..K4OFG"
906  ".....C.6KIP...8..3.DJ...."
907  ".2.J...3C..7.D.9A.EF6L..."
908  "4...3.6N.....L9.H..P8...2"
909  ".9.C.4H.......P....1..FJ3"
910  ".LD.K87.1.BM5AJN....4H.G."
911  ".B..MAI........47O.LD...."
912  ".G....3....F..1..9..M..K6"
913  "P7.A..B8.......2....I.3.."
914  "M..O....9K2..6..1.N.FE.L."
915  "....E...A..N.J.IG8...C.9."
916  "6KL.4...FCI.A.....5J.2D.N"
917  ,
918  // 27
919  "E..I...M......L....D...BK"
920  "F..BH9.K.A2.7..E4.P.6..M."
921  ".6.J..PD8FE.IM...K...54.."
922  "L...8E...IA..HC........7J"
923  ".....7H.4.JK..DOFC....9I."
924  "9...7A.5.B.M34E.KDJ8....."
925  "8...BD....O..7....CP.E.6."
926  ".1.3..8....D...2.ML.B..5A"
927  ".E2.A.O.7..1..I.659..8LD."
928  "KF..M2...PL......A.G..N3."
929  "...76N.1..CBG...DPK..O.J2"
930  ".JK...6B.9..P.7.N.EMFDG.5"
931  "N....G.F.8....OH9.2...E.7"
932  "....4.3....F9.....5.NC.A."
933  "M.A.GL.J......5..4.7.91.."
934  "C.8NE.5..6..M.....BJ17..H"
935  "7.6...NL.41.AC.I8...GJ3.."
936  "...53P.GM2.L..F.....K.68."
937  "J.4.D..H..IG..8K..35.N.FL"
938  "P.F...93.D.....A.1......M"
939  "..7.I...1...DF..PJ.4.MA.."
940  ".KN.....5H..O.63.E.2....4"
941  "....1...O..A2..DCH8B..KE."
942  "3.HA.6BP.....J1957O..28.."
943  "42JO.I...K5C......6.P.B.."
944  ,
945  // 28
946  "...G87..O..F.N..CH6..D..2"
947  "C16..N....DL.3.E........."
948  ".LN.EK..D..O.G6.412....5H"
949  "K...2........59M...P..3.."
950  "..A9.M.6....8.E7O3..K..LB"
951  "7..8B.1.EP.....4.L.6.C.9."
952  ".3.6...9.85.A2F.....B.EP."
953  ".D4K.L..NA....C.M.E..7..."
954  "L..P.3H.CG.7....DKF..I6.."
955  "5EH.G.7.6.1....J....D3K.O"
956  ".6.....G.K.E..I2.4J......"
957  "..ICFP.8H7.2.O.B.NM5..G.."
958  ".M..D9..BE..J..F..I7..LAK"
959  ".BE.L...31.M7FK..C9..8.DN"
960  ".2O......D38C...E...F.P.."
961  ".A.....M..NB..3.J.7E8..2."
962  "...O...B..6..C.8KG4..5D7M"
963  "....M8..I..9..AL1.O.3HBNG"
964  ".C..4....L.....D.F......."
965  "J..5NF..G...H..6..C..1..."
966  "D..N..O....G9.J.A..I...8."
967  ".F.H1BN.K.O.4.8.6.3.9.M.."
968  "B...I....9K..6..2...G.H1."
969  "O...7.CJMI25N...HDKBPFAE."
970  ".....28.F..C........O.JK."
971  ,
972  // 29
973  "9.K..6D.I5...........H..."
974  ".I.E..BK...GN...6.L...3.."
975  "7....2..L8E.K.D1.P5I.6..A"
976  "..N.LEH.A32..CM9........."
977  "..2....9N...3.IC...J.KF8."
978  "......GA..C.7JPNI3....6L."
979  "....E.J.8K..I.....97NG2.B"
980  "O7..3HI...M.....DCF5..914"
981  "L.M.4.3.19.D..2......F.K."
982  "B....F...O9.6ANG.2.PH.E.5"
983  "8KDM...5.1....G......P..6"
984  ".4.H.L.C..J2....G..3ION.."
985  "C.A..J..E...1K......92.5."
986  ".9O.NP.2...IA....H..G..7."
987  "...I5..O.N4.H...2DCKJ...E"
988  "56....1.D..AJ.....7.L.O.."
989  "K.8.H.7.9.5....AC..O..G6F"
990  "3..........O..C.F.P6K.5.."
991  "...OC.4J2.3E.9...N.H7..P1"
992  ".B.7.K.....6.MH.LJ..A...."
993  "I..4.........P..E7D9O.B.H"
994  "E.3G.OP...I1CBL..FN4..82."
995  ".A..9N.8.E...73O..H....4."
996  ".M.C.3....DK..EI......JG."
997  ".HP..D..FB...NO.1KJ8.AL.."
998  ,
999  // 30
1000  "....L.1.8H.CO..P....FA..."
1001  "P1.2.4CO...K..A..3H8...7."
1002  "I..H.G.5.B.6.M..A24.K..9."
1003  "....6I.KF9..5.P.J1.BDCE.M"
1004  ".A....2...F..L..E.M.6.5O3"
1005  "7..1.C...8.L9..4P.5.G.K.."
1006  "JO.5H.M2.I.7.F.6D..A4..NE"
1007  "E.3.NO....K2...LG..7JM..."
1008  ".9F.CJ.H....A.NKB.1..2.5."
1009  "2LB...5..7.P36H.M..N...1D"
1010  ".....P..B....46.HJ......."
1011  "B4..7LI.C.GD2...KA.3H...."
1012  "K5......6J1.........27O8P"
1013  "LP...5K.G..JB3.......1.M."
1014  "..EG...4.F.NKC...O..9.B.."
1015  "..MI...D32AGP..5O...74.BN"
1016  "FC74.....1..LO..8...5.D.J"
1017  "..JN....H...E.I...DPA3.6."
1018  "AE.......O3F..5.........H"
1019  "...8..6......24.9G....I.1"
1020  ".M....8.9..O1.F.C.EL3...A"
1021  ".N...E.3.....I7M1...ODG.K"
1022  "1......P.N9..D..5........"
1023  ".I.P..FGOCMA.......J.5..2"
1024  ".GK....7...3.....92..B.L4"
1025  ,
1026  // 31
1027  "...H....GKM.43..B.D......"
1028  "15I.C....8B.6D.7G....A.H4"
1029  ".7...F..B...J.E16.N....3."
1030  "...D.1...6L7.H.5K....P98F"
1031  "KJ.AF.5CHO...NP2M.....B.."
1032  "4..K..I9.M.DNP..A.3..E5O6"
1033  "PGC...HE.....I5..M...7..J"
1034  ".B.EJ..G.5..L....D.48.2.."
1035  ".D....N.4.J.2A..H..5..F1."
1036  "8....AJLD.7..OM...1B....P"
1037  "CH...N..7.........B3....."
1038  "I..O.JL..P5...3......KH.8"
1039  "D.259.E......6.......L3.."
1040  "...3K6.B.AE..74N25H..G1.."
1041  ".L.B..41.HC...G.OIP8..MN7"
1042  ".........2.C.4.L....69.I5"
1043  "N...7.C...69.5.A......PKL"
1044  "....L.G...13.BOMP.82..D7H"
1045  "...C.H..5.P.E.K...I7....."
1046  "JO..P.96ABI8.....C..N..4G"
1047  ".NA8H.32..O4..IB..L9G..J."
1048  "..4.GD..M.3..27INJ.O....."
1049  ".C9L..A..J.....6.2..I..F."
1050  "BK...4..F.A.CL..87.1.O.M."
1051  "6..P.I.5...M..N....F....D"
1052  ,
1053  // 32
1054  ".6OL.3GB.I.1F.EP..9..24.."
1055  "..1.P.....K....N.2.....ID"
1056  "2.8.K7..J...6..1F.......A"
1057  "...D.8.4..29..LJ7.HMKPF.."
1058  "..I.9N...A..P.M.DK...E5.."
1059  "94.N...5..F..E.C182..BG3."
1060  "8D..3HC....6G.....P.F.72I"
1061  "C..I.E.7D....8BG.F...6..."
1062  "......L....N.24..I..1K.DJ"
1063  ".27HG.NF......I..L..E.A.."
1064  "L...N.I8F6.H.9K.3O..B..5P"
1065  ".9...L..25.B14F.N.JE...7K"
1066  ".1...9B....GJ.8.A.5C....."
1067  "....CPK..J....5.M.7.6.H.3"
1068  "..F7..3..O..N..B8....421."
1069  "AM.8....P...71..26N...3G."
1070  "P....D.2.78.O..5CJ.GA.BH."
1071  "6..4.F...3...K9A..1...J.M"
1072  ".I2.E......JM.N...B98..P."
1073  "FC..7..6.EI.D.G...3H5..KN"
1074  "I8NO.4F.9..DB....5......."
1075  "5..1...G3.MIH.A.9..N....."
1076  "KG.62..1.....L3.....IJE.F"
1077  "....D.6.AC4.9.....OL.HP.."
1078  "..EA.5O.L.6.......D...9N."
1079  ,
1080  // 33
1081  ".CH3.L..D4F..I.........1."
1082  "G..K.....7.O.......L.42N."
1083  "A.D...5O8B...39G.4..I...L"
1084  "1E2OB....A8N..6FCD9.H...G"
1085  "IN..4..3.....J..5OM....9."
1086  "...JEMP..9G8..D7......BA."
1087  "B.M9..L....6...2.FI.KJ..."
1088  ".LN.386A..BH....O.J.2..7."
1089  "7A6..2..3N.....4KP..G8HIC"
1090  ".1.....J.CK3....HB..5L4.."
1091  ".H......P.I.57....G..21B4"
1092  "....7.....EP1....3.2..A.."
1093  ".59.1FI.L8.MJG.B..AH....E"
1094  "NI..D....O3K..A.P9..8F..."
1095  ".O....A..E2.8.HN.J7.P...."
1096  ".MC..P....H2...A7..ID...1"
1097  ".6.....M.J.14.BDG.3.O9F2."
1098  ".......CG.........4...M.."
1099  "HDL...8N7.......FK2C.E..B"
1100  "..KP2I.F.3...N7J.E.6..L85"
1101  "D.E...C.4.7B..I....A.1..M"
1102  "J..M..7..D.A..4...ONBG..2"
1103  "9.7.6..K..P..O....D...8.."
1104  ".2IN..GE1.D..8...MK.CPJH."
1105  "FG..8B.2.L..KH.....1.5E..",
1106 
1107  // 55 16x16 instances (mostly harmless) from janko.at
1108 
1109  // http://janko.at/Raetsel/Sudoku/301.a.htm
1110  // 34
1111  "D92.....G...43.."
1112  "4CF.....9D.2.6EB"
1113  ".E.1....F.8BC..A"
1114  "G56.....A3C....1"
1115  ".7G5A8....61...."
1116  "2...C....B7....."
1117  "..AE.964..G....."
1118  ".F9.5.7.4......."
1119  ".....29....A.C.."
1120  "........645D.1.."
1121  "....D....1.C.B7F"
1122  ".....E.C2G...8A9"
1123  "B..9.G52.....EF6"
1124  ".256..F.....D.B."
1125  "E13.6.D........7"
1126  "A...8BC3....954."
1127  ,
1128 
1129  // http://janko.at/Raetsel/Sudoku/302.a.htm
1130  // 35
1131  ".DG1.C.BE..3.4.A"
1132  "..7B.62..41...59"
1133  ".......D.....G.."
1134  "..49.7.3.B6..FD."
1135  ".9..G...C......4"
1136  "G..46....9F.3.B."
1137  ".C5.1...BE.86..G"
1138  ".B.....E2G...D.."
1139  "..3...596.....1."
1140  "F..C2.76...B.E3."
1141  ".1.8.4D....7F..5"
1142  "E......F...D..9."
1143  ".AB..FG.1.3.C8.."
1144  "..2.....F......."
1145  "8F...BC..62.97.."
1146  "1.6.A..59.C.GB2."
1147  ,
1148 
1149  // http://janko.at/Raetsel/Sudoku/303.a.htm
1150  // 36
1151  ".....D.3..7F.A.."
1152  "...B1.F8....26.."
1153  ".F.3...6D..AC..."
1154  "AGC.9.5..8....BD"
1155  "E.FG5...7...A.9."
1156  "2.7.....89A36.F5"
1157  "...1.9...CBE...."
1158  ".3....A.....BG2."
1159  ".1B2.....7....6."
1160  "....B16...3.9..."
1161  "5D.4F3EA.....2.B"
1162  ".E.A...9...D83.C"
1163  "4A....B..E.8.FC9"
1164  "...EA..G1...D.4."
1165  "..GC....FD.B1..."
1166  "..D.47..6.C....."
1167  ,
1168 
1169  // http://janko.at/Raetsel/Sudoku/304.a.htm
1170  // 37
1171  "....9...5...3B.."
1172  "...D13.7.4.....F"
1173  "637...2..81AC9.."
1174  ".2G..5.......18D"
1175  "...F4...3...8C.."
1176  "E.D.7..6..G...A5"
1177  "C5.6..3....F.2.."
1178  "4.A...1D72.9..B."
1179  ".E..D.9CA6...F.1"
1180  "..9.5....E..D.26"
1181  "B6...4..D..5.7.A"
1182  "..F4...A...C9..."
1183  "AB4.......2..G6."
1184  "..68FBD..5...A47"
1185  "1.....6.9.E4B..."
1186  "..32...5...B...."
1187  ,
1188 
1189  // http://janko.at/Raetsel/Sudoku/305.a.htm
1190  // 38
1191  "..16.E.8.BF.4..."
1192  ".5...9D......A73"
1193  "..3...B.78.D.6.."
1194  "......1...9...BE"
1195  "C..1D..6B5..7.A4"
1196  "...5.F.98..32.DG"
1197  "3.....C..D.A5.E."
1198  "....3B5.F7...9.."
1199  "..5...6C.2AE...."
1200  ".3.BE.2..4.....9"
1201  "F9.2A..B5.7.G..."
1202  "EA.G..756..BD..1"
1203  "6C...8...9......"
1204  "..9.6.47.E...D.."
1205  "2GE......C6...F."
1206  "...3.CG.2.D.65.."
1207  ,
1208 
1209  // http://janko.at/Raetsel/Sudoku/306.a.htm
1210  // 39
1211  ".....D5..7.169.."
1212  "..4..2BE8.G..A.."
1213  "8DA....752..BGF."
1214  "G.9EA.86..3F2..."
1215  "C..4G1.....7F..."
1216  ".G.A...315.6..C8"
1217  "E.5..F7.4G..1.A2"
1218  ".91..BE...D.54G."
1219  ".68D.3...C5..B9."
1220  "4E.5..9B.31..F.G"
1221  "3B..E.G1A...C.4."
1222  "...95.....F83..7"
1223  "...C9G..F1.5D8.B"
1224  ".468..DFC....3E5"
1225  "..2..E.A7DB..C.."
1226  "..EFB.3..86....."
1227  ,
1228 
1229  // http://janko.at/Raetsel/Sudoku/307.a.htm
1230  // 40
1231  ".BC..32...9..D.."
1232  ".3..CB...52A.9E4"
1233  "7E.A...D8.6B2..5"
1234  "..9F..A.DC7.B6.."
1235  ".15..2.E..3...4."
1236  "4GD81.3C...7..6F"
1237  ".C.9....E.4.G..1"
1238  "..E3..59G.FD.B.."
1239  "..A.2E.FC9..84.."
1240  "B..E.9.4....F.A."
1241  "16..A...57.F3E9B"
1242  ".9...6..4.E..7G."
1243  "..64.C85.2..DA.."
1244  "E..DB1.23...6.59"
1245  "C5G.9D4...1E..2."
1246  "..2..F...DA..CB."
1247  ,
1248 
1249  // http://janko.at/Raetsel/Sudoku/308.a.htm
1250  // 41
1251  "G.E37..1.....6.."
1252  "96..E..3..G5D.F."
1253  ".7..64.CF31..29E"
1254  "....F...8.9E437."
1255  "6AF...D.3..1...."
1256  "..1...B5.8F47..3"
1257  ".83B2.47.G....61"
1258  "..79.6...EC..8.G"
1259  "E.C..2A...8.FG.."
1260  "25....C.GA.78B4."
1261  "7..AD3F.24...E.."
1262  "....G..B.1...C52"
1263  ".4A2B5.D...8...."
1264  "FE8..G2A1.73..C."
1265  ".C.78F..4..2..E5"
1266  "..9.....E..G34.8"
1267  ,
1268 
1269  // http://janko.at/Raetsel/Sudoku/309.a.htm
1270  // 42
1271  ".G.4..1E6.9...2."
1272  ".D..4G.C.....9F7"
1273  "..79.D...5C.B.G."
1274  ".EFC7...G..D.5.3"
1275  "5...C...E6BFD..."
1276  "...1...5..D.CB.2"
1277  "7.CG29.D3...E8.F"
1278  "94...EGB.2.C...."
1279  "....E.2.583...CD"
1280  "3.D5...89.FB7G.E"
1281  "4.1E.F..A...3..."
1282  "...F1B3G...E...9"
1283  "F.9.8..1...G23D."
1284  ".A.B.4D...7.5F.."
1285  "8CE.....1.25..7."
1286  ".7...5.3F9..G.8."
1287  ,
1288 
1289  // http://janko.at/Raetsel/Sudoku/310.a.htm
1290  // 43
1291  "...4.1.9..7...B5"
1292  "6E..2.8....CGA.."
1293  ".51....B.D....6."
1294  "B.9..E..G..A...7"
1295  "..7.5F9G..48...."
1296  "..29..3..F..5.7."
1297  "G.BD...837.E..94"
1298  "......7E.1.6A2G3"
1299  "94GA7.2.63......"
1300  "5B..A.E18...79.2"
1301  ".1.8..6..4..BD.."
1302  "....G8..EB92.4.."
1303  "D...9..A..1..G.6"
1304  ".3....4.C....1E."
1305  "..4B6....E.7..2A"
1306  "F9...5..A.3.4..."
1307  ,
1308 
1309  // http://janko.at/Raetsel/Sudoku/361.a.htm
1310  // 44
1311  ".G..5.2.E.FA.4C."
1312  "AB..G....35.17D9"
1313  "53..4AC..DB....."
1314  ".6.C3B..2.8.5..."
1315  "1...A....E.D9CG3"
1316  "GDA9.4..B.1.6E.."
1317  ".FB.1..E9....D.8"
1318  "C..3.59G48......"
1319  "......F38G2.7..4"
1320  "6.3....A7..9.8E."
1321  "..CE.9.1..4.DG35"
1322  "89GD2.4....6...C"
1323  "...G.C.4..958.7."
1324  ".....1A..F78..42"
1325  "4871.3G....2..9A"
1326  ".C9.72.8.6.4..1."
1327  ,
1328 
1329  // http://janko.at/Raetsel/Sudoku/362.a.htm
1330  // 45
1331  "A...18..79..C..6"
1332  ".37.A2...FD...E9"
1333  "G14D..5...8C.A.."
1334  ".268.E7.3A....D5"
1335  "3...D1...7A2.8.4"
1336  "7CF.9..4....D.2."
1337  "5..63.A28...1CF."
1338  "...1.6...3FD..5."
1339  ".A..FC6...9.3..."
1340  ".D2F...3A5.1E..8"
1341  ".9.G....D..7.F1C"
1342  "E.C.G9D...3F...7"
1343  "17....9B.2E.43C."
1344  "..9.E3...C..5D7F"
1345  "FE...AC...G5.29."
1346  "D..C..2F..73...E"
1347  ,
1348 
1349  // http://janko.at/Raetsel/Sudoku/363.a.htm
1350  // 46
1351  "3.8.BD..5F72E..6"
1352  "..G..4.7E..6F5.."
1353  ".AF.2..C....9G73"
1354  "59C...FE.AG....."
1355  "C5..1..F.4.G.E.7"
1356  "F..2.C..B13...GD"
1357  "4..B73.D....C..."
1358  "GD...A...C.7B48."
1359  ".G5FD.3...9...BE"
1360  "...C....6.E1G..9"
1361  "28...7E1..B.6..4"
1362  "1.B.5.C.3..8..AF"
1363  ".....ED.16...345"
1364  "9C21....7..A.8E."
1365  "..EA9..3F.8..7.."
1366  "6..5827A..4D.F.C"
1367  ,
1368 
1369  // http://janko.at/Raetsel/Sudoku/364.a.htm
1370  // 47
1371  "1.....6C.4G.9BA."
1372  ".G6..F.9A.D1...2"
1373  "...D7G.3F...41.."
1374  ".3A.2..1.759.E.G"
1375  "B8..D.F.C.2.A..."
1376  "C....1..DBFA2..5"
1377  "..FG.E.....58C9."
1378  ".25A3.C.G..E...1"
1379  "3...4..B.G.DE78."
1380  ".C78A.....3.12.."
1381  "5..1FC37..E....9"
1382  "...4.2.8.F.B..CA"
1383  "A.4.6B7.5..F.9D."
1384  "..8C...DB.975..."
1385  "9...85.E3.A..46."
1386  ".5D7.A9.E2.....8"
1387  ,
1388 
1389  // http://janko.at/Raetsel/Sudoku/365.a.htm
1390  // 48
1391  "..D.2...5A1....F"
1392  "E21F..9..6.D...G"
1393  "7A.9G1..2E.4D..8"
1394  ".B64.3FA...8.E.2"
1395  "...3...F...G2A.."
1396  ".F7...5.8D4.B.3."
1397  "4....C.....F8.D1"
1398  ".G....B3A2.....6"
1399  "3.....4CF8....6."
1400  "94.B1.....D....E"
1401  ".C.A.E8D.B...15."
1402  "..G8B...1...C..."
1403  "B.A.8...6F2.3DE."
1404  "2..16.E5..A39.84"
1405  "6...9.3..5..1C2B"
1406  "8....D12...9.6.."
1407  ,
1408 
1409  // http://janko.at/Raetsel/Sudoku/366.a.htm
1410  // 49
1411  "3....2A.4F.6..G1"
1412  "ADF4..3..5....E."
1413  "..5G..1E....FAB."
1414  "..E.GF75..B..93."
1415  "B...17...A629..."
1416  "...EFG..7.516..C"
1417  "63..D...G...E42F"
1418  "2....8639...1G.."
1419  "..B8...76G2....E"
1420  "5C32...4...E..1G"
1421  "G..62E.9..D4B..."
1422  "...D5CG...A3...7"
1423  ".G7..5..84F9.B.."
1424  ".F6B....5E..21.."
1425  ".5....B..6..7EF9"
1426  "E4..A.9F.BC....5"
1427  ,
1428 
1429  // http://janko.at/Raetsel/Sudoku/367.a.htm
1430  // 50
1431  "B........45DC.6A"
1432  "4.F...639.CA.E.."
1433  ".9A...CD26.8F1B."
1434  "6.C3.7.8.F..9..."
1435  "D68.E..B...5...."
1436  "73...8A5..9.2..."
1437  "A.G1..9..26..D8."
1438  ".C9.......81A6E."
1439  ".574FA.......G1."
1440  ".AD..37..G..4F.E"
1441  "...9.G..452...CD"
1442  "....B...F..9.725"
1443  "...B..G.C.F.12.9"
1444  ".16AC.5FG3...8D."
1445  "..2.36.759...C.F"
1446  "F8.C194........6"
1447  ,
1448 
1449  // http://janko.at/Raetsel/Sudoku/368.a.htm
1450  // 51
1451  "C..B61..G...F.AE"
1452  "4E8F...A.....DG."
1453  ".D..F3.E1.5A..6."
1454  "5.....GBE9FC..82"
1455  "..5EB.D8...1.F.6"
1456  "..AD.72...6..3.8"
1457  "...3..E.9FB85..."
1458  "6.B4..1....2CAE."
1459  ".3E9C....G..D1.7"
1460  "...CEG3D.7..A..."
1461  "A.F..B...CD.EG.."
1462  "D.7.1...B2.348.."
1463  "FG..8EB17A.....3"
1464  ".4..D6.G3.CE..5."
1465  ".62.....D...74CA"
1466  "3B.A...4..9F8..G"
1467  ,
1468 
1469  // http://janko.at/Raetsel/Sudoku/369.a.htm
1470  // 52
1471  "...E.6DB...2.8.."
1472  "....5G.3.9F8C1.."
1473  "981....FG....7.."
1474  ".3.F8....65.2..9"
1475  "3G....4A5D..7.F."
1476  ".A.D...2......64"
1477  ".2.4C.F..A.G...3"
1478  "..F.D.....6C.21E"
1479  "1F9.B2.....E.D.."
1480  "4...E.3..B.DF.2."
1481  "5E......9...3.C."
1482  ".D.3..8142....5A"
1483  "2..5.D6....F1.A."
1484  "..4....86....EDG"
1485  "..3CGFB.E.DA...."
1486  "..G.3...279.6..."
1487  ,
1488 
1489  // http://janko.at/Raetsel/Sudoku/370.a.htm
1490  // 53
1491  "3....1G..5.7.A4."
1492  "FE7C.3.9.......G"
1493  ".8.....5D9G.C..3"
1494  "5G.A6....38.FD7."
1495  "...5G.94.8.27C.."
1496  ".98.E.5C.G......"
1497  "4....7.25.CB.6.A"
1498  "2A.F.......6.5G."
1499  ".F3.5.......4.DB"
1500  "C.B.98.AF.7....6"
1501  "......6.2D.C.9E."
1502  "..6G4.B.81.9A..."
1503  ".D53.C8....E6.97"
1504  "A..2.D467.....5."
1505  "8.......4.9.32B1"
1506  ".4F.2.3..61....C"
1507  ,
1508 
1509  // http://janko.at/Raetsel/Sudoku/501.a.htm
1510  // 54
1511  "..E3.7.1.5.6.B.."
1512  "....G85B92.FE..."
1513  "C...4.36A......2"
1514  ".4.BA......G7..C"
1515  "48.2E...5G.9ADB."
1516  ".....B...C4...9E"
1517  "9A..F42.E1...5C."
1518  ".5C.7.9G8....413"
1519  "BE8....26A.C.G3."
1520  ".FD...7E.931..56"
1521  "AC...G6...2....."
1522  ".1369.85...BD.A7"
1523  "E..A6......5C.7."
1524  "3......A7F.E...5"
1525  "...51.G7CDA2...."
1526  "..G.C.B.3.1.9A.."
1527  ,
1528 
1529  // http://janko.at/Raetsel/Sudoku/502.a.htm
1530  // 55
1531  "G..B..12....73.C"
1532  "..8DB.7CG9A....."
1533  "6.3...D...4E.8B."
1534  "4...38G.21....AD"
1535  "..F.........E.6."
1536  ".E6..75DFG3.B..."
1537  ".7.G.F916EB.4583"
1538  ".B.3.E2..89...F1"
1539  "74...3E..62.5.1."
1540  "9852.CB7DFE.3.G."
1541  "...A.56F431..C9."
1542  ".F.6.........E.."
1543  "C1....F4.B5G...E"
1544  ".D4.EG...2...9.8"
1545  ".....D8974.1CA.."
1546  "B.A7....ED..F..4"
1547  ,
1548 
1549  // http://janko.at/Raetsel/Sudoku/503.a.htm
1550  // 56
1551  "7B..9C.3..6.A.2E"
1552  "4.2...67A..53..D"
1553  ".....ADE.CB.4.5."
1554  "AD8....B7.F....."
1555  ".C...1.A.9.....8"
1556  "F.E8...C.4.D.6.2"
1557  "..D.59.......1A."
1558  ".1.2......7FBDC3"
1559  "BF6EC4......2.7."
1560  ".53.......C2.E.."
1561  "D.G.2.A.5...F3.C"
1562  "2.....1.B.3...8."
1563  ".....F.43....CD7"
1564  ".8.G.E7.C25....."
1565  "C..DG..1F7...2.A"
1566  "E7.A.6..9.18..B5"
1567  ,
1568 
1569  // http://janko.at/Raetsel/Sudoku/504.a.htm
1570  // 57
1571  ".21..BD...EF6G.."
1572  "..6.5.F....D.8.E"
1573  "G4.....EB.7.1.D3"
1574  "C.D..37G..61...."
1575  "AB.D8..9.1.E..F."
1576  "6.F4..G..D..8..B"
1577  "....BD.1F.8.7.C9"
1578  "..3...6..G.BED.."
1579  "..B91.C..E...A.."
1580  "47.2.6.A3.1G...."
1581  "8..3..E..B..F1.G"
1582  ".1..7.3.D..C9.25"
1583  "....GF..28B..4.A"
1584  "5A.8.4.B1.....GF"
1585  "D.2.C....F.6.7.."
1586  "..41DA...7G..C9."
1587  ,
1588 
1589  // http://janko.at/Raetsel/Sudoku/505.a.htm
1590  // 58
1591  ".B...7..4D..E13."
1592  "D......6G.E7...F"
1593  "8.6F....B....7.."
1594  "7...91D..F8C.B.."
1595  ".F.G8.1.3..27..."
1596  ".1.6.4329.7.F..D"
1597  "3..7..5..GBD8..."
1598  "48D.CE....A...9."
1599  ".3...G....C4.9EB"
1600  "...148C..3..A..2"
1601  "9..4.6.7FA5.C.G."
1602  "...EF..5.1.B6.D."
1603  "..5.ABG..7F9...6"
1604  "..3....F....18.E"
1605  "G...E5.32......9"
1606  ".6FB..89..3...C."
1607  ,
1608 
1609  // http://janko.at/Raetsel/Sudoku/506.a.htm
1610  // 59
1611  "...FDAE..6.1.3B."
1612  "1..C...9.D34.6.."
1613  "8A3.4.....2E7C.."
1614  "..DG.3......8.5E"
1615  "3F2.C.....8B.5.9"
1616  ".DE.8..B2C..A..4"
1617  "C8...1.........6"
1618  ".....D.31.5...E."
1619  ".G...E.84.D....."
1620  "A.........1...43"
1621  "D..E..17C..2.FG."
1622  "2.5.AF.....9.D7B"
1623  "73.2......6.B4.."
1624  "..483B.....D.A61"
1625  "..A.14F.B...5..C"
1626  ".1C.6.D..24A9..."
1627  ,
1628 
1629  // http://janko.at/Raetsel/Sudoku/507.a.htm
1630  // 60
1631  "4.8CB9G...D..FA2"
1632  "G..18..A96...E.."
1633  "F9....ED..8....B"
1634  "...D73...2F.G.81"
1635  ".......2....C.F9"
1636  "3.D7.E6...9.4..A"
1637  ".C.4..D9.GA..3.7"
1638  ".2.......7.3.65."
1639  ".3B.5.2.......D."
1640  "6.4..G8.FC..B.2."
1641  "E..G.B...D2.18.F"
1642  "CD.2....3......."
1643  "D1.B.8F...C9E..."
1644  "2....D..1B....G5"
1645  "..5...17D..G9..C"
1646  "7E9..C...468FD.3"
1647  ,
1648 
1649  // http://janko.at/Raetsel/Sudoku/508.a.htm
1650  // 61
1651  "D.B.8.4..5G..2.9"
1652  ".C..6.3...D1.7B."
1653  "GE4.B..52A..FD.C"
1654  "..7.2..E.F9....."
1655  ".2..4....3.D9GEF"
1656  "43.7..A..8......"
1657  "5.ABGD.F..1...37"
1658  "..E......7..6B.."
1659  "..2E..G......3.."
1660  "C5...B..D.F971.8"
1661  "......5..2..C.GE"
1662  "348GD.C....7..5."
1663  ".....91.8..F.6.."
1664  "1.G2..F65..E.89B"
1665  ".8C.54...1.G..F."
1666  "F.5..87..9.A.C.1"
1667  ,
1668 
1669  // http://janko.at/Raetsel/Sudoku/509.a.htm
1670  // 62 // problems
1671  "..EF96...8.5B.C."
1672  "D...FE....1.2A.."
1673  ".86..2..C...57.1"
1674  "C21...BD9..E...3"
1675  "5..1.C...6....DA"
1676  ".G.....7.E.1.5BC"
1677  "B...D1..8...7..."
1678  "..9D..A27.3.E..."
1679  "...3.A.E5B..6F.."
1680  "...5...C..83...B"
1681  "FDB.2.9.6.....5."
1682  "61....5...E.G..9"
1683  "4...8..3B7...EA2"
1684  "E.26...A..G..CF."
1685  "..58.D....4F...G"
1686  ".B.7C.2...5AD9.."
1687  ,
1688 
1689  // http://janko.at/Raetsel/Sudoku/510.a.htm
1690  // 63
1691  "..2..DA6.38.14.."
1692  "...5.F..2......."
1693  "6.8.2.G.....7A.B"
1694  "A.F.....65.G..D."
1695  "...6.8E.52...B.."
1696  "7....2.F.G39..8E"
1697  "8..3679..4.C.1.G"
1698  ".B.EG..18.A....7"
1699  "1....A.8C..FG.3."
1700  "E.A.1.3..D42B..5"
1701  "97..CG6.1.B....4"
1702  "..3...2D.E6.A..."
1703  ".C..B.74.....5.A"
1704  "B.68.....C.7.D.F"
1705  ".......A..1.2..."
1706  "..4A.C8.E6G..7.."
1707  ,
1708 
1709  // http://janko.at/Raetsel/Sudoku/511.a.htm
1710  // 64
1711  "A..95.B.G...8.FD"
1712  "G.D...6FB...A5.."
1713  ".B...1D83.A9G.7."
1714  "F68....G5..1...C"
1715  "..28DA9..5FC...G"
1716  "..G.87.2.A4D.6.."
1717  "....3F.....E.CD9"
1718  "9C5D......G.FA8."
1719  ".71B.6......5842"
1720  "D5F.B.....26...."
1721  "..9.127.F.85.D.."
1722  "2...E35..CB719.."
1723  "6...F..BE....734"
1724  ".F.ECD.3479...2."
1725  "..AG...9C1...F.8"
1726  "39.5...1.D.FB..A"
1727  ,
1728 
1729  // http://janko.at/Raetsel/Sudoku/512.a.htm
1730  // 65
1731  "....G5D.C1...B2."
1732  "6...E.BC.G..D8.."
1733  "D13C..7..4..5G.."
1734  ".72B48..5.6.C9.."
1735  "....B9E....F4.12"
1736  "...A..FD7B.C8..3"
1737  "E6F..1....G3.DB9"
1738  "B..4.2.89.1...G."
1739  ".5...7.ED.C.G..8"
1740  "C9D.14....E..A35"
1741  "8..2D.591A..6..."
1742  "7G.36....259...."
1743  "..6D.E.5..B4A27."
1744  "..95..2..8..B3D4"
1745  "..7G..4.6E.5...F"
1746  ".B8...97.C32...."
1747  ,
1748 
1749  // http://janko.at/Raetsel/Sudoku/513.a.htm
1750  // 66
1751  "D...9A..6.F4.3.C"
1752  "....B6..5A.E9D.."
1753  "6E5......D..7F.."
1754  ".3G9..FDC...4..."
1755  "16..AF4..C.7..58"
1756  "G....1..A.B8..F9"
1757  ".7C.3..8...F6..."
1758  "A8.F.G.C43..2..."
1759  "...7..9E3.D.8.4F"
1760  "...8G...9..5.6C."
1761  "59..F3.4..C....G"
1762  "4F..6.D..B7A..2E"
1763  "...D...BE9..G86."
1764  "..2G..3......BE5"
1765  "..E48.6A..2C...."
1766  "3.8.E5.F..AD...4"
1767  ,
1768 
1769  // http://janko.at/Raetsel/Sudoku/514.a.htm
1770  // 67
1771  "...B562E.1G....."
1772  ".D27A...4...56B."
1773  ".G6..B.C..2..E7."
1774  ".1.C..7.DB..3.42"
1775  "....37.2E..G..64"
1776  "D.3..5..C.A8.G.1"
1777  "C..A...F9...D..3"
1778  ".2.FDG8..3.4.5.E"
1779  "2.8.F.4..CEBG.5."
1780  "E..D...G5...C..B"
1781  "1.5.2C.D..9..F.8"
1782  "FC..E..5G.81...."
1783  "A3.5..G8.9..6.E."
1784  ".F4..A..2.1..39."
1785  ".E16...3...C42G."
1786  ".....E1.763AF..."
1787  ,
1788 
1789  // http://janko.at/Raetsel/Sudoku/515.a.htm
1790  // 68
1791  "A.5.FB.C...7..3."
1792  "G38....D.C.EB5.."
1793  "..F...3.9G8..D7."
1794  "...E.2.4.A.59.FG"
1795  "8..A..6.3F7D5..."
1796  "B..4....5...DEA."
1797  "61..BD75..E....."
1798  ".5C.1E.A.8....62"
1799  "C8....E.7.62.GD."
1800  ".....A..D95F..84"
1801  ".D41...6....2..7"
1802  "...928D1.E..3..C"
1803  "57.3E.A.8.9.C..."
1804  ".21..C58.4...F.."
1805  "..6C9.1.2....AEB"
1806  ".A..D...G.1C.4.5"
1807  ,
1808 
1809  // http://janko.at/Raetsel/Sudoku/516.a.htm
1810  // 69
1811  "...E9.5..6.G...F"
1812  ".6.4.3.G...7.1.B"
1813  ".37A.E..49.5C..."
1814  "9....C76.32E.548"
1815  ".E...4..DG9.2..."
1816  ".4...562C...G8.."
1817  ".G93..1B5F.2.C.7"
1818  "C1.639.A.......5"
1819  "D.......2.496.8G"
1820  "6.3.F.9EG5..B2C."
1821  "..AB...86EC...3."
1822  "...9.2C1..B...D."
1823  "7A1.462.3B5....D"
1824  "...D5.89..G.1BA."
1825  "E.5.G...9.6.F.2."
1826  "4...B.E..D.87..."
1827  ,
1828 
1829  // http://janko.at/Raetsel/Sudoku/517.a.htm
1830  // 70
1831  ".FE6.A.8......1."
1832  "145..7.E..F...68"
1833  "...C.4..EG82..5F"
1834  "....5FD.7B1..C.4"
1835  "..4.82A.C..1B..."
1836  ".8C7..5....AD24G"
1837  "..1F..9.G83BA..."
1838  "..A9F.E6D.....71"
1839  "F9.....53C.718.."
1840  "...321CD.6..74.."
1841  "A1726....4..GFC."
1842  "...49..F.1A8.E.."
1843  "D.F..62B.593...."
1844  "4B..D83A..2.5..."
1845  "87...5..B.4..936"
1846  ".6......8.7.CBD."
1847  ,
1848 
1849  // http://janko.at/Raetsel/Sudoku/518.a.htm
1850  // 71
1851  "...84......D.1F7"
1852  ".6.C..A.4G.....9"
1853  "..945.G.8.F..3A."
1854  "...7CFD2.3...E.G"
1855  "..6B..58..G....."
1856  "8.7..G.C9.4A1..E"
1857  "C..EA3.9...5.GD."
1858  ".F...2.....B3.8A"
1859  "AB.6F.....C...9."
1860  ".7E.B...5.16G..3"
1861  "1..G79.3A.D..C.5"
1862  ".....1..7E..AB.."
1863  "3.4...8.E792B..."
1864  ".E8..D.B.A.359.."
1865  "5.....1A.D..E.3."
1866  "69D.2......C7..."
1867  ,
1868 
1869  // http://janko.at/Raetsel/Sudoku/519.a.htm
1870  // 72// problems
1871  "CD.E9.8......6.."
1872  ".62..3...E..85.7"
1873  ".G...6...AF5...D"
1874  "....D54.39.8...E"
1875  "6FB..ED4...G.1.."
1876  "4.A.5..2D......G"
1877  ".C.1...GF53A2..6"
1878  ".2.3.A.1....F..."
1879  "...2....4.B.9.6."
1880  "3..6G8E95...4.2."
1881  "G......D9..3.F.8"
1882  "..4.2...68A..GC3"
1883  "A...1.3E.D9C...."
1884  "E...49C...5...1."
1885  "2.9D..A...8..3F."
1886  "..8......2.7A.E5"
1887  ,
1888 
1889  // http://janko.at/Raetsel/Sudoku/520.a.htm
1890  // 73
1891  "D..6..1.2C3....8"
1892  "..1..386..5..9.."
1893  ".8C2......DGBF1."
1894  "..5.G......1.A.D"
1895  "..A876..4..C5..."
1896  "64F...AD.2.5..C."
1897  "E....1B9.6A...24"
1898  "B...4....8G...7."
1899  ".7...BD....6...9"
1900  "FG...C9.1D4....A"
1901  ".5..E.6.G7...1DC"
1902  "...BF..G..2A37.."
1903  "5.8.6......D.3.."
1904  ".E2D5A......7CF."
1905  "..7..9..A51..4.."
1906  "9....DC1.4..E..5"
1907  ,
1908 
1909  // http://janko.at/Raetsel/Sudoku/586.a.htm
1910  // 74
1911  "8D...6E...A2...."
1912  "E9.6....4..D.537"
1913  "..539C.2..7.A4.."
1914  "..B2G..5......6D"
1915  ".F....G9CB84...."
1916  "21.D.F5..7.EB.G6"
1917  "983..47.65...A.2"
1918  ".7.C6....A..3954"
1919  "C698..1....54.7."
1920  "F.A...46.82..D9G"
1921  "42.5B.C..3G.6.8F"
1922  "....5E28F9....A."
1923  "7B......G..1C3.."
1924  "..F4.5..B.3AG6.."
1925  "35E.C..A....7.49"
1926  "....D1...FC...25"
1927  ,
1928 
1929  // http://janko.at/Raetsel/Sudoku/587.a.htm
1930  // 75
1931  "6D.5F.B83..7...."
1932  ".F.761...854.A.."
1933  "39.8.D..B..EF.6."
1934  "..E.3.956F...CB1"
1935  "F65......GBA...2"
1936  "...3.6C7D9...8.B"
1937  "..DE..82F.7...5."
1938  "B.7.DF....3.619."
1939  ".A9B.5....81.F.6"
1940  ".3...E.BG5..12.."
1941  "C.G...DF7B9.A..."
1942  "5...1C6......B84"
1943  "7E6...F91A.B.3.."
1944  ".5.9A..D..6.B.2E"
1945  "..A.BG5...F97.1."
1946  "....2..65E.8C.AF"
1947  ,
1948 
1949  // http://janko.at/Raetsel/Sudoku/588.a.htm
1950  // 76
1951  "F.....8.43..BGD6"
1952  "6E..G29....C3.7."
1953  "2.1..D7.5.E..C.."
1954  "89.4...C7.612..."
1955  ".1.F..DAEB5...8."
1956  "..6AF34...D..E1."
1957  "E...B..5..8G.493"
1958  "7.892....4.3D..."
1959  "...1E.A....F63.C"
1960  "D6E.89..G..5...1"
1961  ".G3..F...91E78.."
1962  ".F...1GB36..E.A."
1963  "...87G.6C...4.FA"
1964  "..7..8.1.FB..6.2"
1965  ".D.GA....134..CE"
1966  "C2A6..F3.5.....D"
1967  ,
1968 
1969  // http://janko.at/Raetsel/Sudoku/589.a.htm
1970  // 77
1971  "...439.27..5..G."
1972  "5C67...A93...2D."
1973  ".3B...1D...2.78."
1974  "...2.G7.8EA.3.5F"
1975  "E.C.A23....D...7"
1976  "...D.B..G7F81..6"
1977  ".G.1.68.2A.ECD.."
1978  "F8.6.4G......AE5"
1979  "643......DB.F.2E"
1980  "..586.4C.F2.D.B."
1981  "B..F8A2G..3.7..."
1982  "7...E....894.C.A"
1983  "D7.3.1B4.CE.9..."
1984  ".F4.9...B2...6C."
1985  ".BG...67D...4E13"
1986  ".6..F..31.4AB..."
1987  ,
1988 
1989  // http://janko.at/Raetsel/Sudoku/590.a.htm
1990  // 78
1991  ".1B.....2.59F.6G"
1992  "G.2341A...BF...."
1993  "C.E8....3..D.24."
1994  "F....9E..1...B38"
1995  "..1.F45.6.3.2..9"
1996  "3..E.8C.5D..1..."
1997  "....DB..A8...FE3"
1998  ".4.93.1.E..G.8D."
1999  ".GF.C..7.5.69.8."
2000  "BDC...F1..A8...."
2001  "...5..94.21.G..C"
2002  "E..1.5.8.FC3.D.."
2003  "1B4...8..92....6"
2004  ".A8.9..C....45.B"
2005  "....12...6853A.F"
2006  "5C.27A.B.....91."
2007  ,
2008 
2009  // http://janko.at/Raetsel/Sudoku/591.a.htm
2010  // 79
2011  "A57...8E4......9"
2012  ".4C85.6....9.E3B"
2013  ".E1...3G657..AC8"
2014  "...F.1.9.8EA5.7."
2015  ".8.5.7...4F...2."
2016  "..9316....BG8..."
2017  "..E2A..4.....D97"
2018  "F.4....856..G1.3"
2019  "6.84..ECB....F.5"
2020  "5FA.....C..637.."
2021  "...7F4....1528.."
2022  ".2...35...8.C.1."
2023  ".9.13E2.8.4.A..."
2024  "BD2..G4FAC...98."
2025  "8G5.C....D.EF3B."
2026  "4......57B...2G6"
2027  ,
2028 
2029  // http://janko.at/Raetsel/Sudoku/592.a.htm
2030  // 80
2031  "..8.A.F.B97.1.6."
2032  "1B79...6.....8E."
2033  "..E3..928...D.5."
2034  "26..8.B....17..."
2035  "91..6A2..B3..D.."
2036  ".F..37.52.GD.4.."
2037  "3.679...5.EF...A"
2038  "4.B..FC..16...G5"
2039  "73...8A..5D..F.1"
2040  "5...FC.3...98G.E"
2041  "..F.D5.13.A8..B."
2042  "..A..B6..2FG..7D"
2043  "...6B....E.2..1C"
2044  ".4.F...A1D..GE.."
2045  ".A2.....G...4638"
2046  ".7.G.28F.6.3.A.."
2047  ,
2048 
2049  // http://janko.at/Raetsel/Sudoku/593.a.htm
2050  // 81
2051  ".2ED.4...C...F.."
2052  ".8.FE.6.1.....A4"
2053  "A..7.8F.29.B...C"
2054  "....3GCB...5.87D"
2055  "..45DA..B7F3C.6."
2056  "....G...4..CA2.5"
2057  "2.7.F..CG...34B."
2058  ".ED.B54381..G..."
2059  "...4..825GBE.3F."
2060  ".B5G...63..F.C.1"
2061  "1.F27..E...4...."
2062  ".D.84FG5..167B.."
2063  "3C1.2...DB8G...."
2064  "D...6.59.F3.8..2"
2065  "4G.....F.A.71.C."
2066  "..8...B...9.ED3."
2067  ,
2068 
2069  // http://janko.at/Raetsel/Sudoku/594.a.htm
2070  // 82
2071  "5....E...7B..CF2"
2072  "AF.467....3...D."
2073  "D.E.C.3....8.7.."
2074  "....8..DA6.E..5."
2075  "..3B....4.A.EF1."
2076  "69..B.D.3.....C7"
2077  "1..G...49.C..6.."
2078  "...D12G5FE..B..."
2079  "...7..93285AF..."
2080  "..8..4.76...2..G"
2081  "96.....F.3.B..84"
2082  ".AB3.G.6....95.."
2083  ".1..F.69E..2...."
2084  "..9.G....F.3.2.E"
2085  ".E...D....95G.BF"
2086  "2G7..C5...4....3"
2087  ,
2088 
2089  // http://janko.at/Raetsel/Sudoku/595.a.htm
2090  // 83
2091  ".3.B8..C61...2.."
2092  ".E.2...F..4.1A67"
2093  "71D...A...C..B.."
2094  ".6...92D.B.3..45"
2095  "...8A...C.F4...3"
2096  ".F9.75E4..B.6..."
2097  "5..1...8..6.4F.."
2098  "4...C....EA.B.2G"
2099  "2D.7.E5....6...1"
2100  "..BA.D..9...G..8"
2101  "...E.1..G2DF.59."
2102  "6...4C.B...73..."
2103  "A2..B.C.46E...7."
2104  "..1..2...9...8AD"
2105  "DC75.A..3...E.B."
2106  "..8...GEA..C2.5."
2107  ,
2108 
2109  // http://janko.at/Raetsel/Sudoku/596.a.htm
2110  // 84
2111  "B62...9...1...G7"
2112  "C.....7.6..A.1.9"
2113  ".1....A8..7.2..3"
2114  "..A831.CG2..E..."
2115  ".8..92.A..GD4..."
2116  "G.C.D8..F.529..."
2117  "...4.........D6A"
2118  ".5.B.C.17..3G8.."
2119  "..E12..9D.B.6.8."
2120  "9C7.........5..."
2121  "...A54.7..2C.F.G"
2122  "...FCD..4.A5..9."
2123  "...9..1E2.F83C.."
2124  "1..7.9..A3....D."
2125  "2.3.8..B.5.....6"
2126  "EB...3...7...G12"
2127  ,
2128 
2129  // http://janko.at/Raetsel/Sudoku/597.a.htm
2130  // 85
2131  "..6..1..4..F3.A."
2132  "7E..6G.3....FC.."
2133  "BC3..FD.6.9.G..2"
2134  ".....4E.CG3.B..."
2135  "1.E..C.....2.A.."
2136  "...AE6...4F..9.3"
2137  ".8.2..3F.C.1...."
2138  "34..8...B57..EC."
2139  ".B9..3CD...8..E5"
2140  "....9.F.GA..4.1."
2141  "A.4..E2...6BC..."
2142  "..8.A.....E..7.B"
2143  "...C.2A6.EB....."
2144  "E..8.9.5.3C..62G"
2145  "..B9....2.GD..5C"
2146  ".3.5C..E..1..4.."
2147  ,
2148 
2149  // http://janko.at/Raetsel/Sudoku/598.a.htm
2150  // 86
2151  ".FA..5...B7..E.6"
2152  "18....4B...C..G."
2153  "..G.7..CF....8.5"
2154  ".B9CG8.........."
2155  ".D..A.G..85....E"
2156  "69..3...1...C5.."
2157  "7.4B....G.A.2..F"
2158  "..8.5B6D..27...."
2159  "....8G..EC61.D.."
2160  "3..6.C.7....91.8"
2161  "..DF...5...9..73"
2162  "8....6B..2.5..E."
2163  "..........14EFD."
2164  "9.6....AD..F.7.."
2165  ".E..6...29....1C"
2166  "G.2..EF...C..4B."
2167  ,
2168 
2169  // http://janko.at/Raetsel/Sudoku/599.a.htm
2170  // 87
2171  ".3..6GF..C8....."
2172  "G..9.B.8...5.A74"
2173  "7..8.2..B..D...."
2174  ".EA.....3.6..9B."
2175  "..F.2....3AG...."
2176  "E7...........39G"
2177  ".9.A..31E6..FC.."
2178  "4.3..D.9C.B....E"
2179  "6....8.4A.2..G.C"
2180  "..G3..CFD9..4.A."
2181  "A85...........FB"
2182  "....5A7....6.2.."
2183  ".24..7.D.....16."
2184  "....1..3..C.2..8"
2185  "1A7.C...6.3.E..9"
2186  ".....6E..1F2..3."
2187  ,
2188 
2189  // http://janko.at/Raetsel/Sudoku/600.a.htm
2190  // 88
2191  "....47.....9B.1."
2192  "..5..9F2.6....43"
2193  "B..3.....E24..9."
2194  "..9.....A57..2.."
2195  ".DA4E..7...C.F.."
2196  ".1.6..4.E....8.B"
2197  "....81BF..4.5..7"
2198  "...F9A....D..E.4"
2199  "5.2..3....A71..."
2200  "6..C.B..G9FE...."
2201  "7.8....9.D..C.3."
2202  "..G.6...1..3E45."
2203  "..F..E8D.....A.."
2204  ".2..741.....3..8"
2205  "D6....5.92B..1.."
2206  ".A.EB.....C6....",
2207  // 89
2208  //".N..JG..O7591...8I....L.."
2209  "BNDAJG62O7591KHF8IP34CLME"
2210  "FG.M.B8...P.E...CJ..H...."
2211  "...........G.4.H.D.O.NJA2"
2212  ".....J.EN4.L6MA.B.2......"
2213  "HE..2..DC.....F4KMA.B.9O8"
2214  "M....62...47C19......E5.."
2215  ".I2.8M.JGL...ADN..K..3.F7"
2216  "..H3.5..89....I.J.....NL."
2217  "1B..9.FAP.6.N....537.H..O"
2218  "......1..N...O...LC.68.PG"
2219  "KOA.FNBH.....7.C.....M..6"
2220  "45.ECP.I..N.F.J1...MK.79."
2221  "I.L..8.O..9.P...A...2.1J."
2222  "..621.D.M.....B8LG..P..CH"
2223  ".HP.N7E.L1....3..B..O.G45"
2224  "....BIO....5.C.P...FN48E."
2225  "...FL.....2.DH..17..59O.."
2226  "..I.MF..2G.N...A6O.HC.PB."
2227  "72.1..L...IM.96E.45G....."
2228  "..9...7M..A.O...I...L...."
2229  ".C.JA.........1.....E.48."
2230  "O.BI.......PHL.6..1....5C"
2231  "G6M...N4FI8...K..H.E....."
2232  ".L..4.917....BE.G8F.M.I.."
2233  "8F......5.O3..4...9.....K",
2234  // 90
2235  //".N..JG..O7591...8I....L.."
2236  ".ND.JG6.O7591..F8IP.4.LM."
2237  "FG.M.B8...P.E...CJ..H...."
2238  "...........G.4.H.D.O.NJA2"
2239  ".....J.EN4.L6MA.B.2......"
2240  "HE..2..DC.....F4KMA.B.9O8"
2241  "M....62...47C19......E5.."
2242  ".I2.8M.JGL...ADN..K..3.F7"
2243  "..H3.5..89....I.J.....NL."
2244  "1B..9.FAP.6.N....537.H..O"
2245  "......1..N...O...LC.68.PG"
2246  "KOA.FNBH.....7.C.....M..6"
2247  "45.ECP.I..N.F.J1...MK.79."
2248  "I.L..8.O..9.P...A...2.1J."
2249  "..621.D.M.....B8LG..P..CH"
2250  ".HP.N7E.L1....3..B..O.G45"
2251  "....BIO....5.C.P...FN48E."
2252  "...FL.....2.DH..17..59O.."
2253  "..I.MF..2G.N...A6O.HC.PB."
2254  "72.1..L...IM.96E.45G....."
2255  "..9...7M..A.O...I...L...."
2256  ".C.JA.........1.....E.48."
2257  "O.BI.......PHL.6..1....5C"
2258  "G6M...N4FI8...K..H.E....."
2259  ".L..4.917....BE.G8F.M.I.."
2260  "8F......5.O3..4...9.....K"
2261  };
2262 
2264  const unsigned int n_examples = sizeof(examples)/sizeof(char*);
2265 
2267  int example_size(const char *s) {
2268  int l = std::strlen(s);
2269  int res = static_cast<int>(std::sqrt(std::sqrt(static_cast<float>(l))));
2270  assert(res*res*res*res == l);
2271  return res;
2272  }
2273 
2275  int sudokuField(const char *s, int n, int i, int j) {
2276  assert(example_size(s) == std::sqrt(static_cast<float>(n)));
2277  assert(i >= 0 && i < n);
2278  assert(j >= 0 && j < n);
2279  char c = s[j*n + i];
2280  if (!std::isalnum(c))
2281  return 0;
2282  if (std::isdigit(c))
2283  return c - '0';
2284  if (std::islower(c))
2285  c = static_cast<char>(std::toupper(c));
2286  // std::alpha(c) == true && std::isupper(c)
2287  int res = (c - 'A') + 10;
2288  if (res > n) return 0;
2289  else return res;
2290  }
2292 }
2293 
2294 // STATISTICS: example-any
SetVarBranch SET_VAR_SIZE_MIN(BranchTbl tbl)
Select variable with smallest unknown set.
Definition: var.hpp:183
SetVarArray y
The fields occupied by a certain number.
Definition: sudoku.cpp:250
void size(unsigned int s)
Set default size.
Definition: options.hpp:467
Options for scripts with additional size parameter
Definition: driver.hh:567
Use lexicographic ordering.
Definition: sudoku.cpp:79
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
Definition: var.hpp:108
Example: Solving Sudoku puzzles using set constraints
Definition: sudoku.cpp:247
Example: Solving Sudoku puzzles using both set and integer constraints
Definition: sudoku.cpp:363
virtual void print(std::ostream &os) const
Print solution.
Definition: sudoku.cpp:337
NNF * l
Left subtree.
Definition: bool-expr.cpp:244
SetVarBranch SET_VAR_NONE(void)
Select first unassigned variable.
Definition: var.hpp:91
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
Definition: arithmetic.cpp:218
void propagation(int v)
Set default propagation value.
Definition: options.hpp:181
IntVarBranch INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Select variable with largest degree divided by domain size.
Definition: var.hpp:227
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
Definition: region.hpp:326
Use minimum size.
Definition: sudoku.cpp:80
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
Definition: options.cpp:435
SudokuSet(const SizeOptions &opt)
Constructor.
Definition: sudoku.cpp:253
SetValBranch SET_VAL_MIN_INC(void)
Include smallest element.
Definition: val.hpp:59
Example: Solving Sudoku puzzles using integer constraints
Definition: sudoku.cpp:99
virtual void print(std::ostream &os) const
Print solution.
Definition: sudoku.cpp:201
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Definition: dom.cpp:44
IntVarBranch INT_VAR_SIZE_MIN(BranchTbl tbl)
Select variable with smallest domain size.
Definition: var.hpp:212
Sudoku(bool share, Sudoku &s)
Constructor for cloning s.
Definition: sudoku.cpp:90
Integer variable array.
Definition: int.hh:741
Handle to region.
Definition: region.hpp:61
int example_size(const char *s)
The size of an instance.
Definition: sudoku.cpp:2267
Superset ( )
Definition: set.hh:648
SudokuMixed(bool share, SudokuMixed &s)
Constructor for cloning s.
Definition: sudoku.cpp:391
IntVarArray x
Values for the fields.
Definition: sudoku.cpp:102
Computation spaces.
Definition: core.hpp:1362
Parametric base-class for scripts.
Definition: driver.hh:622
int sudokuField(const char *s, int n, int i, int j)
Return value at position (i,j) in the example s of size n.
Definition: sudoku.cpp:2275
void decay(double d)
Set default decay factor.
Definition: options.hpp:216
Use both integer and set constraints.
Definition: sudoku.cpp:74
SudokuMixed(const SizeOptions &opt)
Constructor.
Definition: sudoku.cpp:366
void update(Space &, bool share, VarArray< Var > &a)
Update array to be a clone of array a.
Definition: array.hpp:1072
Gecode::FloatVal c(-8, 8)
bool same(const ConstView< ViewA > &, const ConstView< ViewB > &)
Test whether two views are the same.
Definition: view.hpp:603
IntVarBranch INT_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
Definition: var.hpp:162
Gecode::IntArgs i(4, 1, 2, 3, 4)
virtual Space * copy(bool share)
Perform copying during cloning.
Definition: sudoku.cpp:396
Use minimum size over afc.
Definition: sudoku.cpp:82
int n
Number of negative literals for node type.
Definition: bool-expr.cpp:238
Equality ( )
Definition: int.hh:904
Options opt
The options.
Definition: test.cpp:101
NNF * r
Right subtree.
Definition: bool-expr.cpp:246
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Definition: arithmetic.cpp:110
unsigned int size(I &i)
Size of all ranges of range iterator i.
Slice< A > row(int r) const
Access row r.
Definition: matrix.hpp:181
Base class for Sudoku puzzles.
Definition: sudoku.cpp:64
SudokuSet(bool share, SudokuSet &s)
Constructor for cloning s.
Definition: sudoku.cpp:325
Intersection
Definition: set.hh:664
Integer sets.
Definition: int.hh:171
const int n
The size of the problem.
Definition: sudoku.cpp:67
Use maximum afc.
Definition: sudoku.cpp:83
void branching(int v)
Set default branching value.
Definition: options.hpp:203
No additional constraints.
Definition: sudoku.cpp:107
Use minimum size over degree.
Definition: sudoku.cpp:81
Use set constraints.
Definition: sudoku.cpp:73
Passing integer variables.
Definition: int.hh:636
Passing integer arguments.
Definition: int.hh:607
static const IntSet empty
Empty set.
Definition: int.hh:262
SetVarBranch SET_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:213
virtual Space * copy(bool share)
Perform copying during cloning.
Definition: sudoku.cpp:331
Sudoku(const SizeOptions &opt)
Constructor.
Definition: sudoku.cpp:87
Use "same" constraint with integer model.
Definition: sudoku.cpp:108
virtual void print(std::ostream &os) const
Print solution.
Definition: sudoku.cpp:401
union Gecode::@518::NNF::@57 u
Union depending on nodetype t.
const int v[7]
Definition: distinct.cpp:207
void values(Home home, const IntVarArgs &x, IntSet y, IntConLevel icl=ICL_DEF)
Post constraint .
Definition: minimodel.hh:1869
Passing set variables.
Definition: set.hh:490
Use integer constraints.
Definition: sudoku.cpp:72
Set variables
Definition: set.hh:129
void count(Home home, const IntVarArgs &x, int n, IntRelType irt, int m, IntConLevel)
Post propagator for .
Definition: count.cpp:44
Disjoint union.
Definition: set.hh:663
SetVarBranch SET_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Select variable with largest degree divided by domain size.
Definition: var.hpp:198
int main(int argc, char *argv[])
Main-function.
Definition: sudoku.cpp:411
Integer variables.
Definition: int.hh:350
bool assigned(View x, int v)
Whether x is assigned to value v.
Definition: single.hpp:47
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
Definition: rel.cpp:47
IntVarBranch INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count divided by domain size with decay factor d...
Definition: var.hpp:242
Equality ( )
Definition: set.hh:645
void distinct(Home home, const IntVarArgs &x, IntConLevel icl)
Post propagator for for all .
Definition: distinct.cpp:47
void solutions(unsigned int n)
Set default number of solutions to search for.
Definition: options.hpp:243
Matrix-interface for arrays.
Definition: minimodel.hh:1924
Set variable array
Definition: set.hh:571
IntValBranch INT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
Definition: val.hpp:88
void model(int v)
Set default model value.
Definition: options.hpp:155
struct Gecode::@518::NNF::@57::@58 b
For binary nodes (and, or, eqv)
Gecode toplevel namespace
Slice< A > col(int c) const
Access column c.
Definition: matrix.hpp:187
BrancherHandle branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf, FloatVarValPrint vvp)
Branch over x with variable selection vars and value selection vals.
Definition: branch.cpp:43
virtual Space * copy(bool share)
Perform copying during cloning.
Definition: sudoku.cpp:195
Slice< A > slice(int fc, int tc, int fr, int tr) const
Access slice of the matrix.
Definition: matrix.hpp:175
SetVarBranch SET_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
Definition: var.hpp:133
void icl(IntConLevel i)
Set default integer consistency level.
Definition: options.hpp:194
struct Gecode::@518::NNF::@57::@59 a
For atomic nodes.
Domain propagation or consistency.
Definition: int.hh:940
SudokuInt(bool share, SudokuInt &s)
Constructor for cloning s.
Definition: sudoku.cpp:189