00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include "examples/support.hh"
00043
00044 #ifdef GECODE_HAS_SET_VARS
00045 #include "gecode/set.hh"
00046 #endif
00047 #ifdef GECODE_HAS_CPLTSET_VARS
00048 #include "gecode/cpltset.hh"
00049 #endif
00050
00051 #include "gecode/minimodel.hh"
00052
00053 #include <string>
00054 #include <cmath>
00055 #include <cctype>
00056
00057 namespace {
00058 extern const char* examples[];
00059 extern const unsigned int n_examples;
00060 int example_size(const char *s);
00061 int sudokuField(const char *s, int n, int i, int j);
00062 }
00063
00065 class Sudoku : public Example {
00066 protected:
00068 const int n;
00069 public:
00070 #ifdef GECODE_HAS_SET_VARS
00072 enum {
00073 MODEL_INT,
00074 MODEL_SET,
00075 MODEL_MIXED
00076 #ifdef GECODE_HAS_CPLTSET_VARS
00077 ,MODEL_CPLT
00078 #endif
00079 };
00080 #endif
00081
00083 Sudoku(const SizeOptions& opt) : n(example_size(examples[opt.size()])) {}
00084
00086 Sudoku(bool share, Sudoku& s) : Example(share,s), n(s.n) {}
00087
00088 };
00089
00095 class SudokuInt : virtual public Sudoku {
00096 protected:
00098 IntVarArray x;
00099 public:
00100 #ifdef GECODE_HAS_SET_VARS
00102 enum {
00103 PROP_NONE,
00104 PROP_SAME,
00105 };
00106 #endif
00108 SudokuInt(const SizeOptions& opt)
00109 : Sudoku(opt), x(this, n*n*n*n, 1, n*n) {
00110 const int nn = n*n;
00111 MiniModel::Matrix<IntVarArray> m(x, nn, nn);
00112
00113
00114 for (int i=0; i<nn; i++) {
00115 distinct(this, m.row(i), opt.icl());
00116 distinct(this, m.col(i), opt.icl());
00117 }
00118
00119
00120 for (int i=0; i<nn; i+=n) {
00121 for (int j=0; j<nn; j+=n) {
00122 distinct(this, m.slice(i, i+n, j, j+n), opt.icl());
00123 }
00124 }
00125
00126
00127 for (int i=0; i<nn; i++)
00128 for (int j=0; j<nn; j++)
00129 if (int v = sudokuField(examples[opt.size()], nn, i, j))
00130 rel(this, m(i,j), IRT_EQ, v );
00131
00132 #ifdef GECODE_HAS_SET_VARS
00133 if (opt.propagation() == PROP_SAME) {
00134
00135 for (int b=0; b<n; b++) {
00136 int b1c = 0;
00137 int b2c = 0;
00138 IntVarArgs bc1(nn-n);
00139 IntVarArgs bc2(nn-n);
00140 IntVarArgs br1(nn-n);
00141 IntVarArgs br2(nn-n);
00142 for (int i=0; i<n; i++)
00143 for (int j=0; j<n; j++) {
00144 b1c = 0; b2c = 0;
00145 for (int k=0; k<n; k++) {
00146 if (k != j) {
00147 IntVarArgs bc1s = block_col(m, b, i, k);
00148 IntVarArgs br1s = block_row(m, b, i, k);
00149 for (int count=0; count<n; count++) {
00150 bc1[b1c] = bc1s[count];
00151 br1[b1c] = br1s[count];
00152 ++b1c;
00153 }
00154 }
00155 if (k != i) {
00156 IntVarArgs bc2s = block_col(m, b, k, j);
00157 IntVarArgs br2s = block_row(m, b, k, j);
00158 for (int count=0; count<n; count++) {
00159 bc2[b2c] = bc2s[count];
00160 br2[b2c] = br2s[count];
00161 ++b2c;
00162 }
00163 }
00164 }
00165 same(this, nn, bc1, bc2);
00166 same(this, nn, br1, br2);
00167 }
00168 }
00169 }
00170 #endif
00171
00172 branch(this, x, INT_VAR_SIZE_MIN, INT_VAL_SPLIT_MIN);
00173 }
00174
00176 SudokuInt(bool share, SudokuInt& s) : Sudoku(share, s) {
00177 x.update(this, share, s.x);
00178 }
00179
00181 virtual Space*
00182 copy(bool share) {
00183 return new SudokuInt(share,*this);
00184 }
00185
00187 virtual void
00188 print(std::ostream& os) {
00189 os << " ";
00190 for (int i = 0; i<n*n*n*n; i++) {
00191 if (x[i].assigned()) {
00192 if (x[i].val()<10)
00193 os << x[i] << " ";
00194 else
00195 os << (char)(x[i].val()+'A'-10) << " ";
00196 }
00197 else
00198 os << ". ";
00199 if((i+1)%(n*n) == 0)
00200 os << std::endl << " ";
00201 }
00202 os << std::endl;
00203 }
00204
00205 #ifdef GECODE_HAS_SET_VARS
00206 private:
00208 void same(Space* home, int nn, IntVarArgs a, IntVarArgs b) {
00209 SetVar u(home, IntSet::empty, 1, nn);
00210 rel(home, SOT_DUNION, a, u);
00211 rel(home, SOT_DUNION, b, u);
00212 }
00213
00215 IntVarArgs
00216 block_col(MiniModel::Matrix<IntVarArray> m,
00217 int bc, int i, int j) {
00218 return m.slice(bc*n+i, bc*n+i+1, j*n, (j+1)*n);
00219 }
00220
00222 IntVarArgs
00223 block_row(MiniModel::Matrix<IntVarArray> m,
00224 int br, int i, int j) {
00225 return m.slice(j*n, (j+1)*n, br*n+i, br*n+i+1);
00226 }
00227 #endif
00228 };
00229
00230 #ifdef GECODE_HAS_SET_VARS
00231
00236 class SudokuSet : virtual public Sudoku {
00237 protected:
00239 SetVarArray y;
00240 public:
00242 SudokuSet(const SizeOptions& opt)
00243 : Sudoku(opt),
00244 y(this,n*n,IntSet::empty,1,n*n*n*n,n*n,n*n) {
00245
00246 const int nn = n*n;
00247
00248 GECODE_AUTOARRAY(IntSet, row, nn);
00249 GECODE_AUTOARRAY(IntSet, col, nn);
00250 GECODE_AUTOARRAY(IntSet, block, nn);
00251
00252
00253 for (int i=0; i<nn; i++) {
00254 new (&row[i]) IntSet((i*nn)+1, (i+1)*nn);
00255
00256 GECODE_AUTOARRAY(int, dsc, nn);
00257 for (int j=0; j<nn; j++) {
00258 dsc[j] = (j*nn)+1+i;
00259 }
00260 new (&col[i]) IntSet (dsc, nn);
00261 }
00262
00263
00264 for (int i=0; i<n; i++) {
00265 for (int j=0; j<n; j++) {
00266 GECODE_AUTOARRAY(int, dsb_arr, nn);
00267
00268 for (int ii=0; ii<n; ii++) {
00269 for (int jj=0; jj<n; jj++) {
00270 dsb_arr[ii*n+jj] = j*nn*n+i*n+jj*nn+ii+1;
00271 }
00272 }
00273 new (&block[i*n+j]) IntSet(dsb_arr, nn);
00274 }
00275 }
00276
00277 IntSet full(1, nn*nn);
00278
00279 rel(this, SOT_DUNION, y, SetVar(this, full, full));
00280
00281
00282
00283 for (int i=0; i<nn; i++)
00284 for (int j=0; j<nn; j++) {
00285 SetVar inter_row(this, IntSet::empty, full, 1, 1);
00286 rel(this, y[i], SOT_INTER, row[j], SRT_EQ, inter_row);
00287 SetVar inter_col(this, IntSet::empty, full, 1, 1);
00288 rel(this, y[i], SOT_INTER, col[j], SRT_EQ, inter_col);
00289 SetVar inter_block(this, IntSet::empty, full, 1, 1);
00290 rel(this, y[i], SOT_INTER, block[j], SRT_EQ, inter_block);
00291 }
00292
00293
00294 for (int i=0; i<nn; i++)
00295 for (int j=0; j<nn; j++)
00296 if (int idx = sudokuField(examples[opt.size()], nn, i, j))
00297 dom(this, y[idx-1], SRT_SUP, (i+1)+(j*nn) );
00298
00299 branch(this, y, SET_VAR_NONE, SET_VAL_MIN);
00300 }
00301
00303 SudokuSet(bool share, SudokuSet& s) : Sudoku(share,s) {
00304 y.update(this, share, s.y);
00305 }
00306
00308 virtual Space*
00309 copy(bool share) {
00310 return new SudokuSet(share,*this);
00311 }
00312
00314 virtual void
00315 print(std::ostream& os) {
00316 os << '\t';
00317 for (int i = 0; i<n*n*n*n; i++) {
00318 for (int j=0; j<n*n; j++) {
00319 if (y[j].contains(i+1)) {
00320 if (j+1<10)
00321 os << j+1 << " ";
00322 else
00323 os << (char)(j+1+'A'-10) << " ";
00324 break;
00325 }
00326 }
00327 if((i+1)%(n*n) == 0)
00328 os << std::endl << '\t';
00329 }
00330 os << std::endl;
00331 }
00332 };
00333
00334 #ifdef GECODE_HAS_CPLTSET_VARS
00335
00340 class SudokuCpltSet : virtual public Sudoku {
00341 protected:
00343 CpltSetVarArray y;
00344 public:
00346 SudokuCpltSet(const SizeOptions& opt)
00347 : Sudoku(opt),
00348 y(this,n*n,IntSet::empty,1,n*n*n*n) {
00349 const int nn = n*n;
00350
00351
00352 for (int i=0; i<nn; i++)
00353 for (int j=0; j<nn; j++)
00354 if (int idx = sudokuField(examples[opt.size()], nn, i, j)) {
00355 dom(this, y[idx-1], SRT_SUP, (i+1)+(j*nn) );
00356
00357 for (int z = 0; z < nn; z++) {
00358 if (z != idx - 1) {
00359 dom(this, y[z], SRT_DISJ, (i+1)+(j*nn));
00360 }
00361 }
00362 }
00363
00364 for (int i=0; i<nn; i++)
00365 cardinality(this, y[i], nn);
00366
00367 GECODE_AUTOARRAY(IntSet, row, nn);
00368 GECODE_AUTOARRAY(IntSet, col, nn);
00369 GECODE_AUTOARRAY(IntSet, block, nn);
00370
00371
00372 for (int i=0; i<nn; i++) {
00373 new (&row[i]) IntSet((i*nn)+1, (i+1)*nn);
00374
00375 GECODE_AUTOARRAY(int, dsc, nn);
00376 for (int j=0; j<nn; j++) {
00377 dsc[j] = (j*nn)+1+i;
00378 }
00379 new (&col[i]) IntSet (dsc, nn);
00380 }
00381
00382
00383 for (int i=0; i<n; i++) {
00384 for (int j=0; j<n; j++) {
00385 GECODE_AUTOARRAY(int, dsb_arr, nn);
00386
00387 for (int ii=0; ii<n; ii++) {
00388 for (int jj=0; jj<n; jj++) {
00389 dsb_arr[ii*n+jj] = j*nn*n+i*n+jj*nn+ii+1;
00390 }
00391 }
00392 new (&block[i*n+j]) IntSet(dsb_arr, nn);
00393 }
00394 }
00395
00396
00397 if (nn == 9) {
00398 partition(this, y);
00399 } else {
00400
00401 for (int i = 0; i < nn - 1; i++) {
00402 for (int j = i + 1; j < nn; j++) {
00403 rel(this, y[i], SRT_DISJ, y[j]);
00404 }
00405 }
00406 }
00407
00408
00409
00410 for (int i=0; i<nn; i++)
00411 for (int j=0; j<nn; j++) {
00412 exactly(this, y[i], row[j], 1);
00413 exactly(this, y[i], col[j], 1);
00414 exactly(this, y[i], block[j], 1);
00415 }
00416
00417 branch(this, y, CPLTSET_VAR_MIN_CARD, CPLTSET_VAL_MIN_UNKNOWN);
00418 }
00419
00421 SudokuCpltSet(bool share, SudokuCpltSet& s) : Sudoku(share,s) {
00422 y.update(this, share, s.y);
00423 }
00424
00426 virtual Space*
00427 copy(bool share) {
00428 return new SudokuCpltSet(share,*this);
00429 }
00430
00432 virtual void
00433 print(std::ostream& os) {
00434 os << '\t';
00435 for (int i = 0; i<n*n*n*n; i++) {
00436 for (int j=0; j<n*n; j++) {
00437 if (y[j].contains(i+1)) {
00438 if (j+1<10)
00439 os << j+1 << " ";
00440 else
00441 os << (char)(j+1+'A'-10) << " ";
00442 break;
00443 }
00444 }
00445 if((i+1)%(n*n) == 0)
00446 os << std::endl << '\t';
00447 }
00448 os << std::endl;
00449 }
00450 };
00451
00452 #endif
00453
00460 class SudokuMixed : public SudokuInt, public SudokuSet {
00461 public:
00463 SudokuMixed(const SizeOptions& opt)
00464 : Sudoku(opt), SudokuInt(opt), SudokuSet(opt) {
00465 const int nn = n*n;
00466
00467 IntSet is0(0,0);
00468 SetVar dummySet0(this, is0, is0);
00469 IntVar dummyInt0(this, 0, 0);
00470 SetVarArgs ys(nn+1);
00471 ys[0] = dummySet0;
00472 for (int i=0; i<nn; i++)
00473 ys[i+1] = y[i];
00474 IntVarArgs xs(nn*nn+1);
00475 xs[0] = dummyInt0;
00476 for (int i=0; i<nn*nn; i++)
00477 xs[i+1] = x[i];
00478
00479 channel(this, xs, ys);
00480
00481 IntArgs values(nn);
00482 for (int i=nn; i--;)
00483 values[i] = i+1;
00484 count(this, x, IntSet(nn,nn), values, ICL_DOM);
00485 }
00486
00488 SudokuMixed(bool share, SudokuMixed& s)
00489 : Sudoku(share, s), SudokuInt(share, s), SudokuSet(share, s) {}
00490
00492 virtual Space*
00493 copy(bool share) {
00494 return new SudokuMixed(share,*this);
00495 }
00496
00498 virtual void print(std::ostream& os) { SudokuInt::print(os); }
00499
00500 };
00501
00502 #endif
00503
00507 int
00508 main(int argc, char* argv[]) {
00509 SizeOptions opt("Sudoku");
00510 opt.size(0);
00511 opt.icl(ICL_DOM);
00512 opt.solutions(1);
00513 #ifdef GECODE_HAS_SET_VARS
00514 opt.model(Sudoku::MODEL_INT);
00515 opt.model(Sudoku::MODEL_INT, "int", "use integer constraints");
00516 opt.model(Sudoku::MODEL_SET, "set", "use set constraints");
00517 opt.model(Sudoku::MODEL_MIXED, "mixed",
00518 "use both integer and set constraints");
00519 #ifdef GECODE_HAS_CPLTSET_VARS
00520 CpltSet::manager.init(5000000, 2000000);
00521 opt.model(Sudoku::MODEL_CPLT, "cpltset",
00522 "use CpltSet constraints");
00523 #endif
00524 opt.propagation(SudokuInt::PROP_NONE);
00525 opt.propagation(SudokuInt::PROP_NONE, "none", "no additional constraints");
00526 opt.propagation(SudokuInt::PROP_SAME, "same",
00527 "additional \"same\" constraint for integer model");
00528 #endif
00529 opt.parse(argc,argv);
00530 if (opt.size() >= n_examples) {
00531 std::cerr << "Error: size must be between 0 and "
00532 << n_examples-1 << std::endl;
00533 return 1;
00534 }
00535 #ifdef GECODE_HAS_SET_VARS
00536 switch (opt.model()) {
00537 case Sudoku::MODEL_INT:
00538 Example::run<SudokuInt,DFS,SizeOptions>(opt);
00539 break;
00540 case Sudoku::MODEL_SET:
00541 Example::run<SudokuSet,DFS,SizeOptions>(opt);
00542 break;
00543 case Sudoku::MODEL_MIXED:
00544 Example::run<SudokuMixed,DFS,SizeOptions>(opt);
00545 break;
00546 #ifdef GECODE_HAS_CPLTSET_VARS
00547 case Sudoku::MODEL_CPLT:
00548 Example::run<SudokuCpltSet,DFS,SizeOptions>(opt);
00549 break;
00550 #endif
00551 }
00552 #else
00553 Example::run<SudokuInt,DFS,SizeOptions>(opt);
00554 #endif
00555 return 0;
00556 }
00557
00558 namespace {
00559
00568
00570 const char* examples[] = {
00571
00572 "...2.5..."
00573 ".9....73."
00574 "..2..9.6."
00575 "2.....4.9"
00576 "....7...."
00577 "6.9.....1"
00578 ".8.4..1.."
00579 ".63....8."
00580 "...6.8..."
00581 ,
00582
00583 "3..9.4..1"
00584 "..2...4.."
00585 ".61...79."
00586 "6..247..5"
00587 "........."
00588 "2..836..4"
00589 ".46...23."
00590 "..9...6.."
00591 "5..3.9..8"
00592 ,
00593
00594 "....1...."
00595 "3.14..86."
00596 "9..5..2.."
00597 "7..16...."
00598 ".2.8.5.1."
00599 "....97..4"
00600 "..3..4..6"
00601 ".48..69.7"
00602 "....8...."
00603 ,
00604
00605
00606 "..4..3.7."
00607 ".8..7...."
00608 ".7...82.5"
00609 "4.....31."
00610 "9.......8"
00611 ".15.....4"
00612 "1.69...3."
00613 "....2..6."
00614 ".2.4..5.."
00615 ,
00616
00617
00618 ".43.8.25."
00619 "6........"
00620 ".....1.94"
00621 "9....4.7."
00622 "...6.8..."
00623 ".1.2....3"
00624 "82.5....."
00625 "........5"
00626 ".34.9.71."
00627 ,
00628
00629
00630 ".....3.6."
00631 ".......1."
00632 ".975...8."
00633
00634 "....9.2.."
00635 "..8.7.4.."
00636 "..3.6...."
00637
00638 ".1...289."
00639 ".4......."
00640 ".5.1....."
00641 ,
00642
00643 "1..9.7..3"
00644 ".8.....7."
00645 "..9...6.."
00646 "..72.94.."
00647 "41.....95"
00648 "..85.43.."
00649 "..3...7.."
00650 ".5.....4."
00651 "2..8.6..9"
00652 ,
00653
00654 "...3.2..."
00655 ".5.798.3."
00656 "..7...8.."
00657 "..86.73.."
00658 ".7.....6."
00659 "..35.41.."
00660 "..5...6.."
00661 ".2.419.5."
00662 "...8.6..."
00663 ,
00664
00665 "...8....6"
00666 "..162.43."
00667 "4...71..2"
00668 "..72...8."
00669 "....1...."
00670 ".1...62.."
00671 "1..73...4"
00672 ".26.481.."
00673 "3....5..."
00674 ,
00675
00676 "3.5..4.7."
00677 ".7......1"
00678 ".4.9...3."
00679 "4...51..6"
00680 ".9.....4."
00681 "2..84...7"
00682 ".2...7.6."
00683 "8......9."
00684 ".6.4..2.8"
00685 ,
00686
00687 "...7..3.."
00688 ".6....57."
00689 ".738..41."
00690 "..928...."
00691 "5.......9"
00692 "....936.."
00693 ".98..715."
00694 ".54....6."
00695 "..1..9..."
00696 ,
00697
00698 "...6....4"
00699 ".3..9..2."
00700 ".6.8..7.."
00701 "..5.6...1"
00702 "67.3.1.58"
00703 "9...5.4.."
00704 "..6..3.9."
00705 ".1..8..6."
00706 "2....6..."
00707 ,
00708
00709 "8....1.4."
00710 "2.6.9..1."
00711 "..9..6.8."
00712 "124.....9"
00713 "........."
00714 "9.....824"
00715 ".5.4..1.."
00716 ".8..7.2.5"
00717 ".9.5....7"
00718 ,
00719
00720 "652.48..7"
00721 ".7.2.54.."
00722 "........."
00723 ".641...7."
00724 "....8...."
00725 ".8...456."
00726 "........."
00727 "..86.7.2."
00728 "2..89.751"
00729 ,
00730
00731 "..6..2..9"
00732 "1..5...2."
00733 ".473.6..1"
00734 ".....8.4."
00735 ".3.....7."
00736 ".1.6....."
00737 "4..8.321."
00738 ".6...1..4"
00739 "3..4..9.."
00740 ,
00741
00742 "..4.5.9.."
00743 "....7...6"
00744 "37......2"
00745 "..95...8."
00746 "..12.43.."
00747 ".6...92.."
00748 "2......93"
00749 "1...4...."
00750 "..6.2.7.."
00751 ,
00752
00753 "....3.79."
00754 "3.......5"
00755 "...4.73.6"
00756 ".53.94.7."
00757 "....7...."
00758 ".1.82.64."
00759 "7.19.8..."
00760 "8.......1"
00761 ".94.1...."
00762 ,
00763
00764 "2581.4.37"
00765 "936827514"
00766 "47153.28."
00767 "7152.3.4."
00768 "849675321"
00769 "36241..75"
00770 "1249..753"
00771 "593742168"
00772 "687351492"
00773 ,
00774
00775
00776
00777 "...G...9..4.....6F..L8..."
00778 "CEIN.HDM.OF.1L..A..9PJ.4."
00779 ".....A...L..JBN.2.D.1...H"
00780 "P49...JB23.AD..7E..C5F..."
00781 "A1H....F.N5....I.BL...26."
00782 "....7..C.6...H4B..1....I5"
00783 ".F.P...I..B..7.5.L...9..."
00784 ".L6A...5OF.8P...K.NE..734"
00785 "B2.E..L...1J.5....O7.K.AP"
00786 "O.5.CB1.P....3EM....2L.H."
00787 "2..MJ.A...9.3.7......P.8C"
00788 ".....CF.DPG62N.E...OH.M.J"
00789 ".DL..OM..IE.B8..NH...3..K"
00790 ".CO1F.B.N.AH..P.78.JE...D"
00791 "E..6.....H......4M.KIB9.."
00792 "N.J..6......C..1.5.G..H.."
00793 "...75LG...6..1..CI..4.E.."
00794 "9K..6.....HGN.O2P.4......"
00795 ".OA..IP849...2.K3...7GN.."
00796 "..G....N...P.D9....A...C1"
00797 "J...M.NAFE.4..23.7....8L."
00798 ".....J.H9CD1LP..GO....4ME"
00799 "48NK..5.M......JL.......9"
00800 ".I.OG....835.A.DH..P....."
00801 "35......L.J..E....8IG.67B"
00802 ,
00803
00804 ".N..JG..O7591...8I....L.."
00805 "FG.M.B8...P.E...CJ..H...."
00806 "...........G.4.H.D.O.NJA2"
00807 ".....J.EN4.L6MA.B.2......"
00808 "HE..2..DC.....F4KMA.B.9O8"
00809 "M....62...47C19......E5.."
00810 ".I2.8M.JGL...ADN..K..3.F7"
00811 "..H3.5..89....I.J.....NL."
00812 "1B..9.FAP.6.N....537.H..O"
00813 "......1..N...O...LC.68.PG"
00814 "KOA.FNBH.....7.C.....M..6"
00815 "45.ECP.I..N.F.J1...MK.79."
00816 "I.L..8.O..9.P...A...2.1J."
00817 "..621.D.M.....B8LG..P..CH"
00818 ".HP.N7E.L1....3..B..O.G45"
00819 "....BIO....5.C.P...FN48E."
00820 "...FL.....2.DH..17..59O.."
00821 "..I.MF..2G.N...A6O.HC.PB."
00822 "72.1..L...IM.96E.45G....."
00823 "..9...7M..A.O...I...L...."
00824 ".C.JA.........1.....E.48."
00825 "O.BI.......PHL.6..1....5C"
00826 "G6M...N4FI8...K..H.E....."
00827 ".L..4.917....BE.G8F.M.I.."
00828 "8F......5.O3..4...9.....K"
00829 ,
00830
00831 "5.PC..7..J..I...3..H.M.2L"
00832 "H.......F..DA..N.G...9..P"
00833 "...3LCP2.54.71.B....J.8.."
00834 "76M8...3A...H..C.D.FO...."
00835 "...DK..GI..B.L.6.8.14...."
00836 "A......M....D.6.N.P....O2"
00837 "...E5BLF..92..3AJC..6I..."
00838 ".PNJ.6..E7A.8..IM.OL1.G.C"
00839 ".L3...O.N.5.KI.46.....9E."
00840 ".I.G.A..28.MBP...E..HJ3.7"
00841 "J.74.L..D1O96.A3.M...GI.."
00842 "E...1...K....J...P6.7.C.9"
00843 "8M..A9JO.F.P..1...4.E3N6."
00844 "...I.3.7.......EL.CD..H.."
00845 "....DE2..P...N.........K."
00846 ".O.7.FKI1..GJ.N.....9.P8."
00847 ".89..H..BNM73D.KFJ..I.6.A"
00848 "PDBN...9M..C.....O.6..7.."
00849 ".F.K...4..LA9B..C.E75..GN"
00850 "G.A.....7.8.....H....O.3."
00851 "B...C...4......8K.3.P...."
00852 "DHE5..FA...J.3..B.2.KC.98"
00853 "...F...5....N..J9......I."
00854 ".J...P..O.BK....I.M.3..5."
00855 "9...8.B.6.D.M.I..H.5G.J4."
00856 ,
00857
00858 "..6F.....5..3.....H..A.M2"
00859 ".....3....I8.A.MC.KJ.LNG."
00860 ".I.7N..K.2..6...3D..B.O85"
00861 ".3A.PF.D8OBK7.2....L6.9H4"
00862 ".K..CBML.....O.A8.G4.D..."
00863 "1.4.AGL..M5..F.O.9....P2."
00864 "..I.........8......N4E..."
00865 "J.C8.1.6.3.LO.K7AG2P9.H.."
00866 ".2.3BH..9.A...G......O..L"
00867 ".H..M8.J.....NI1.LEF....B"
00868 "I5..4.....G.27..K..3.M..H"
00869 "P..E..I.A..3B.8....G.2..."
00870 "AJ......NFK.I.O9476..G.1."
00871 ".976...E3H....M5.F......O"
00872 ".F.M3.5.GKC4.HJ.N.....ID7"
00873 "..L1K..9.J37.ID..B..E6..."
00874 ".82OH.1..PNML...E..C...J."
00875 "....JLFN.B..G..6M..H..D.9"
00876 "...C.A...I.6.......K.5..."
00877 "E.G.I.....O....J.8F......"
00878 "..M4..9.D.7.K.FE.3O......"
00879 "H.N.....14E..B3L..8I...AG"
00880 "K.O.62.PM...N..H...18C.9."
00881 "LC..8.3...2...H.G...J..4E"
00882 ".B..9NK.E....C6.P.4D.71OI"
00883 ,
00884
00885 "A..F.N......M28DC.LI7..OJ"
00886 "..B...D.M.6....9.....2A.."
00887 ".2..I.56.B...J.MEH......."
00888 "O7...HE...BA..G2........L"
00889 ".H6J.2...G.7NDP.A...8..C."
00890 ".PN35..B..869.2.GA..K.C.."
00891 "....EM13OD.N...49K...7..."
00892 "9G..C....IJF5.B..7.3....."
00893 "HD.....JN....7...EF....9."
00894 "1.OA..G.KL....H..B.CP...."
00895 "..CE.......2..9I....3...."
00896 "FJ..83P.E..K7.NL15H..I2.."
00897 ".4..GJ...6DIB...P...AHL.C"
00898 ".1I.2.M....83.F..4.NBE..."
00899 "L3M.OD.H.AG..4.....69...F"
00900 ".8...5H.3.....M...D..K..4"
00901 "3..4..AEDO7J...5..9..G1.."
00902 "..2N9.8F.P.OIGC.L6..E.H.."
00903 "C...1.7..K.L6.4EO.8.5...N"
00904 ".IG.H..M..E...1A2N4..8.F."
00905 "6..5J..N1...2..H.IGA...P8"
00906 ".L...O...H...C....M5G..A."
00907 "..F...3C.7.P..5N..B..DMH9"
00908 "291D..6..M..H.7.3.J.N..B."
00909 "....MK..29F.G.DO4...6.E35"
00910 ,
00911
00912 "....B12O3..D..F..KPL.E4.7"
00913 "1M..GL..H..K.A.....39.P.."
00914 ".8.3.4.....7..6.F.....CK."
00915 "P.O...758.2..MC.....1L.A."
00916 "...HFK6.A..8...9B...2...J"
00917 "91.KJE..L.5O..GD.....4..."
00918 ".I..3..D.2.....C4MLAK..N."
00919 ".4..6IA.P7.....B9......3."
00920 "M.F...4.J...8....N.H.1G7."
00921 "..5P.N.....C.731.I.E.9A.."
00922 ".....GO.KDL......BA......"
00923 ".3A..F...9..K.EI5.7..6.DN"
00924 ".G.54.L.....PH..3F6....2."
00925 "....P.....G..2D.OH.1B...C"
00926 "6.EM.7N....3.B4..DC..K1P."
00927 "B.9.....I..5N...7OGK...46"
00928 "OF.GD6HP..JM..BA8.I.C...."
00929 "8.L7...........P.3M5...92"
00930 ".EM.....45IF7....2.CJ8DL."
00931 ".6.4.8..NA.2......9....GI"
00932 "2..A1DCN..3G.F5.L..I..O6H"
00933 "..BIO..1.H.L...G........."
00934 "C.P.....M8.9O..5A..N.JK.D"
00935 "H...N...FOA4..73....5..CM"
00936 ".D4..3...6BE..N.2JH8..L.."
00937 ,
00938
00939 "LJ.FH2...K....359.E.B6.N."
00940 "...EML1FC.PJ.A.8I....2.K4"
00941 "9........G1..6..K...PAL3C"
00942 "P...C34..8.N7.........DE."
00943 "...7....E..IO...124.J5.F."
00944 ".8.L.PA.2..31FG....N..C.I"
00945 "F.G......M........2.K..1."
00946 "....2KH6.JOD..9.L..G...B."
00947 ".6O3..G...4.NJ.H.PB...5.9"
00948 "I...K..LBN...E.76.A....8."
00949 "D.B.L......8.3.C.KM.6...."
00950 ".C593.I.N4.26MB..1..L.K.."
00951 "M.F6......DA45.9..N.I3..B"
00952 ".G..79.H...KJ...4...AN.2."
00953 ".KH...BC....LON..7..D.8.F"
00954 "2..B...MP....7OEJ4....6.1"
00955 ".4....2O.9......N..1....G"
00956 ".....G.JF.2..L.6.5......."
00957 "C9A.G...H1...PJ..L.3.8.MN"
00958 "...1......M.....O.P8.K3J."
00959 "...N.HP.K25G3..JC8..1M..."
00960 "..2K.FC34.A....N7..9.LB.."
00961 "..65DJ..L..C.4.1...BGF..."
00962 "OF..E..7.B.......634...D."
00963 "G.3..N.I9D7PM8KF2....4..."
00964 ,
00965
00966 ".1..I8.P..6.N...BD...3O.."
00967 ".9.6...E.M43.8..AK.2J.1.."
00968 "...JKL...FA...P.I4...DB.."
00969 "E...P.I.B.7.1..J.HC...98."
00970 "..5M8GJ.KD.O...N3..1AI..."
00971 "K.2C4.M.N..J..I.......H.5"
00972 "N..B9O.D...KH6.E...C...7I"
00973 "DE..JK4.....L.1B7..68PN2."
00974 ".....P...C..F.7...L.O9..."
00975 "...35.H......92..M.4.EC.1"
00976 "P..IL..H.........1..3.D.."
00977 "....B9..8.3I5.C...K...F1."
00978 "FH....2O..D.4M.P...A...GC"
00979 "JA.......KF.......4.EOMIP"
00980 "3.7GNF...A.2OB9C.E5.HJ..."
00981 "2.I.1.......AO5.P...K.3.."
00982 "..H....L..M.CIJ..7...4..."
00983 "GO.9..KF.I.P3...E.HJ...N7"
00984 "5.37...B.E...4N..O.8....."
00985 "4B...7.9O.HL..E2C3.K51.M."
00986 "L.O42...D..AJ.8...GH.N..E"
00987 "9M.8.H..LG1..N..5.E..F7B."
00988 "......FAC..5M..I6J.B4...G"
00989 "...F..82..P.E......36HK.L"
00990 "B.J.G5...O.H2..98.7......"
00991 ,
00992
00993 ".CNPHK.53.O9F..D.78..J..."
00994 "J.....F.DB...7.G..PAE...L"
00995 ".6.........5.4A......I..."
00996 "A..L.6.E.1JG....5.H.2...9"
00997 "..G4..P...E2N.M...C..FB.1"
00998 "..PKJ...G41O..C.N..H....."
00999 ".M..I5L97J.3H...E2.8...D."
01000 "1.4..ON.83G.P.D59..C.BH.."
01001 "..2.9.......4.F.3.6..O.7."
01002 "3F.7.MEC..5...2..4K.LN8.."
01003 "...I........MF7.6AOG..LE."
01004 "C1.3..JG..D.9...4..N...68"
01005 "...M7L9..NHA...FJ.I..3.C."
01006 ".A...P...5...E3.8M..K4OFG"
01007 ".....C.6KIP...8..3.DJ...."
01008 ".2.J...3C..7.D.9A.EF6L..."
01009 "4...3.6N.....L9.H..P8...2"
01010 ".9.C.4H.......P....1..FJ3"
01011 ".LD.K87.1.BM5AJN....4H.G."
01012 ".B..MAI........47O.LD...."
01013 ".G....3....F..1..9..M..K6"
01014 "P7.A..B8.......2....I.3.."
01015 "M..O....9K2..6..1.N.FE.L."
01016 "....E...A..N.J.IG8...C.9."
01017 "6KL.4...FCI.A.....5J.2D.N"
01018 ,
01019
01020 "E..I...M......L....D...BK"
01021 "F..BH9.K.A2.7..E4.P.6..M."
01022 ".6.J..PD8FE.IM...K...54.."
01023 "L...8E...IA..HC........7J"
01024 ".....7H.4.JK..DOFC....9I."
01025 "9...7A.5.B.M34E.KDJ8....."
01026 "8...BD....O..7....CP.E.6."
01027 ".1.3..8....D...2.ML.B..5A"
01028 ".E2.A.O.7..1..I.659..8LD."
01029 "KF..M2...PL......A.G..N3."
01030 "...76N.1..CBG...DPK..O.J2"
01031 ".JK...6B.9..P.7.N.EMFDG.5"
01032 "N....G.F.8....OH9.2...E.7"
01033 "....4.3....F9.....5.NC.A."
01034 "M.A.GL.J......5..4.7.91.."
01035 "C.8NE.5..6..M.....BJ17..H"
01036 "7.6...NL.41.AC.I8...GJ3.."
01037 "...53P.GM2.L..F.....K.68."
01038 "J.4.D..H..IG..8K..35.N.FL"
01039 "P.F...93.D.....A.1......M"
01040 "..7.I...1...DF..PJ.4.MA.."
01041 ".KN.....5H..O.63.E.2....4"
01042 "....1...O..A2..DCH8B..KE."
01043 "3.HA.6BP.....J1957O..28.."
01044 "42JO.I...K5C......6.P.B.."
01045 ,
01046
01047 "...G87..O..F.N..CH6..D..2"
01048 "C16..N....DL.3.E........."
01049 ".LN.EK..D..O.G6.412....5H"
01050 "K...2........59M...P..3.."
01051 "..A9.M.6....8.E7O3..K..LB"
01052 "7..8B.1.EP.....4.L.6.C.9."
01053 ".3.6...9.85.A2F.....B.EP."
01054 ".D4K.L..NA....C.M.E..7..."
01055 "L..P.3H.CG.7....DKF..I6.."
01056 "5EH.G.7.6.1....J....D3K.O"
01057 ".6.....G.K.E..I2.4J......"
01058 "..ICFP.8H7.2.O.B.NM5..G.."
01059 ".M..D9..BE..J..F..I7..LAK"
01060 ".BE.L...31.M7FK..C9..8.DN"
01061 ".2O......D38C...E...F.P.."
01062 ".A.....M..NB..3.J.7E8..2."
01063 "...O...B..6..C.8KG4..5D7M"
01064 "....M8..I..9..AL1.O.3HBNG"
01065 ".C..4....L.....D.F......."
01066 "J..5NF..G...H..6..C..1..."
01067 "D..N..O....G9.J.A..I...8."
01068 ".F.H1BN.K.O.4.8.6.3.9.M.."
01069 "B...I....9K..6..2...G.H1."
01070 "O...7.CJMI25N...HDKBPFAE."
01071 ".....28.F..C........O.JK."
01072 ,
01073
01074 "9.K..6D.I5...........H..."
01075 ".I.E..BK...GN...6.L...3.."
01076 "7....2..L8E.K.D1.P5I.6..A"
01077 "..N.LEH.A32..CM9........."
01078 "..2....9N...3.IC...J.KF8."
01079 "......GA..C.7JPNI3....6L."
01080 "....E.J.8K..I.....97NG2.B"
01081 "O7..3HI...M.....DCF5..914"
01082 "L.M.4.3.19.D..2......F.K."
01083 "B....F...O9.6ANG.2.PH.E.5"
01084 "8KDM...5.1....G......P..6"
01085 ".4.H.L.C..J2....G..3ION.."
01086 "C.A..J..E...1K......92.5."
01087 ".9O.NP.2...IA....H..G..7."
01088 "...I5..O.N4.H...2DCKJ...E"
01089 "56....1.D..AJ.....7.L.O.."
01090 "K.8.H.7.9.5....AC..O..G6F"
01091 "3..........O..C.F.P6K.5.."
01092 "...OC.4J2.3E.9...N.H7..P1"
01093 ".B.7.K.....6.MH.LJ..A...."
01094 "I..4.........P..E7D9O.B.H"
01095 "E.3G.OP...I1CBL..FN4..82."
01096 ".A..9N.8.E...73O..H....4."
01097 ".M.C.3....DK..EI......JG."
01098 ".HP..D..FB...NO.1KJ8.AL.."
01099 ,
01100
01101 "....L.1.8H.CO..P....FA..."
01102 "P1.2.4CO...K..A..3H8...7."
01103 "I..H.G.5.B.6.M..A24.K..9."
01104 "....6I.KF9..5.P.J1.BDCE.M"
01105 ".A....2...F..L..E.M.6.5O3"
01106 "7..1.C...8.L9..4P.5.G.K.."
01107 "JO.5H.M2.I.7.F.6D..A4..NE"
01108 "E.3.NO....K2...LG..7JM..."
01109 ".9F.CJ.H....A.NKB.1..2.5."
01110 "2LB...5..7.P36H.M..N...1D"
01111 ".....P..B....46.HJ......."
01112 "B4..7LI.C.GD2...KA.3H...."
01113 "K5......6J1.........27O8P"
01114 "LP...5K.G..JB3.......1.M."
01115 "..EG...4.F.NKC...O..9.B.."
01116 "..MI...D32AGP..5O...74.BN"
01117 "FC74.....1..LO..8...5.D.J"
01118 "..JN....H...E.I...DPA3.6."
01119 "AE.......O3F..5.........H"
01120 "...8..6......24.9G....I.1"
01121 ".M....8.9..O1.F.C.EL3...A"
01122 ".N...E.3.....I7M1...ODG.K"
01123 "1......P.N9..D..5........"
01124 ".I.P..FGOCMA.......J.5..2"
01125 ".GK....7...3.....92..B.L4"
01126 ,
01127
01128 "...H....GKM.43..B.D......"
01129 "15I.C....8B.6D.7G....A.H4"
01130 ".7...F..B...J.E16.N....3."
01131 "...D.1...6L7.H.5K....P98F"
01132 "KJ.AF.5CHO...NP2M.....B.."
01133 "4..K..I9.M.DNP..A.3..E5O6"
01134 "PGC...HE.....I5..M...7..J"
01135 ".B.EJ..G.5..L....D.48.2.."
01136 ".D....N.4.J.2A..H..5..F1."
01137 "8....AJLD.7..OM...1B....P"
01138 "CH...N..7.........B3....."
01139 "I..O.JL..P5...3......KH.8"
01140 "D.259.E......6.......L3.."
01141 "...3K6.B.AE..74N25H..G1.."
01142 ".L.B..41.HC...G.OIP8..MN7"
01143 ".........2.C.4.L....69.I5"
01144 "N...7.C...69.5.A......PKL"
01145 "....L.G...13.BOMP.82..D7H"
01146 "...C.H..5.P.E.K...I7....."
01147 "JO..P.96ABI8.....C..N..4G"
01148 ".NA8H.32..O4..IB..L9G..J."
01149 "..4.GD..M.3..27INJ.O....."
01150 ".C9L..A..J.....6.2..I..F."
01151 "BK...4..F.A.CL..87.1.O.M."
01152 "6..P.I.5...M..N....F....D"
01153 ,
01154
01155 ".6OL.3GB.I.1F.EP..9..24.."
01156 "..1.P.....K....N.2.....ID"
01157 "2.8.K7..J...6..1F.......A"
01158 "...D.8.4..29..LJ7.HMKPF.."
01159 "..I.9N...A..P.M.DK...E5.."
01160 "94.N...5..F..E.C182..BG3."
01161 "8D..3HC....6G.....P.F.72I"
01162 "C..I.E.7D....8BG.F...6..."
01163 "......L....N.24..I..1K.DJ"
01164 ".27HG.NF......I..L..E.A.."
01165 "L...N.I8F6.H.9K.3O..B..5P"
01166 ".9...L..25.B14F.N.JE...7K"
01167 ".1...9B....GJ.8.A.5C....."
01168 "....CPK..J....5.M.7.6.H.3"
01169 "..F7..3..O..N..B8....421."
01170 "AM.8....P...71..26N...3G."
01171 "P....D.2.78.O..5CJ.GA.BH."
01172 "6..4.F...3...K9A..1...J.M"
01173 ".I2.E......JM.N...B98..P."
01174 "FC..7..6.EI.D.G...3H5..KN"
01175 "I8NO.4F.9..DB....5......."
01176 "5..1...G3.MIH.A.9..N....."
01177 "KG.62..1.....L3.....IJE.F"
01178 "....D.6.AC4.9.....OL.HP.."
01179 "..EA.5O.L.6.......D...9N."
01180 ,
01181
01182 ".CH3.L..D4F..I.........1."
01183 "G..K.....7.O.......L.42N."
01184 "A.D...5O8B...39G.4..I...L"
01185 "1E2OB....A8N..6FCD9.H...G"
01186 "IN..4..3.....J..5OM....9."
01187 "...JEMP..9G8..D7......BA."
01188 "B.M9..L....6...2.FI.KJ..."
01189 ".LN.386A..BH....O.J.2..7."
01190 "7A6..2..3N.....4KP..G8HIC"
01191 ".1.....J.CK3....HB..5L4.."
01192 ".H......P.I.57....G..21B4"
01193 "....7.....EP1....3.2..A.."
01194 ".59.1FI.L8.MJG.B..AH....E"
01195 "NI..D....O3K..A.P9..8F..."
01196 ".O....A..E2.8.HN.J7.P...."
01197 ".MC..P....H2...A7..ID...1"
01198 ".6.....M.J.14.BDG.3.O9F2."
01199 ".......CG.........4...M.."
01200 "HDL...8N7.......FK2C.E..B"
01201 "..KP2I.F.3...N7J.E.6..L85"
01202 "D.E...C.4.7B..I....A.1..M"
01203 "J..M..7..D.A..4...ONBG..2"
01204 "9.7.6..K..P..O....D...8.."
01205 ".2IN..GE1.D..8...MK.CPJH."
01206 "FG..8B.2.L..KH.....1.5E..",
01207
01208
01209
01210
01211
01212 "D92.....G...43.."
01213 "4CF.....9D.2.6EB"
01214 ".E.1....F.8BC..A"
01215 "G56.....A3C....1"
01216 ".7G5A8....61...."
01217 "2...C....B7....."
01218 "..AE.964..G....."
01219 ".F9.5.7.4......."
01220 ".....29....A.C.."
01221 "........645D.1.."
01222 "....D....1.C.B7F"
01223 ".....E.C2G...8A9"
01224 "B..9.G52.....EF6"
01225 ".256..F.....D.B."
01226 "E13.6.D........7"
01227 "A...8BC3....954."
01228 ,
01229
01230
01231
01232 ".DG1.C.BE..3.4.A"
01233 "..7B.62..41...59"
01234 ".......D.....G.."
01235 "..49.7.3.B6..FD."
01236 ".9..G...C......4"
01237 "G..46....9F.3.B."
01238 ".C5.1...BE.86..G"
01239 ".B.....E2G...D.."
01240 "..3...596.....1."
01241 "F..C2.76...B.E3."
01242 ".1.8.4D....7F..5"
01243 "E......F...D..9."
01244 ".AB..FG.1.3.C8.."
01245 "..2.....F......."
01246 "8F...BC..62.97.."
01247 "1.6.A..59.C.GB2."
01248 ,
01249
01250
01251
01252 ".....D.3..7F.A.."
01253 "...B1.F8....26.."
01254 ".F.3...6D..AC..."
01255 "AGC.9.5..8....BD"
01256 "E.FG5...7...A.9."
01257 "2.7.....89A36.F5"
01258 "...1.9...CBE...."
01259 ".3....A.....BG2."
01260 ".1B2.....7....6."
01261 "....B16...3.9..."
01262 "5D.4F3EA.....2.B"
01263 ".E.A...9...D83.C"
01264 "4A....B..E.8.FC9"
01265 "...EA..G1...D.4."
01266 "..GC....FD.B1..."
01267 "..D.47..6.C....."
01268 ,
01269
01270
01271
01272 "....9...5...3B.."
01273 "...D13.7.4.....F"
01274 "637...2..81AC9.."
01275 ".2G..5.......18D"
01276 "...F4...3...8C.."
01277 "E.D.7..6..G...A5"
01278 "C5.6..3....F.2.."
01279 "4.A...1D72.9..B."
01280 ".E..D.9CA6...F.1"
01281 "..9.5....E..D.26"
01282 "B6...4..D..5.7.A"
01283 "..F4...A...C9..."
01284 "AB4.......2..G6."
01285 "..68FBD..5...A47"
01286 "1.....6.9.E4B..."
01287 "..32...5...B...."
01288 ,
01289
01290
01291
01292 "..16.E.8.BF.4..."
01293 ".5...9D......A73"
01294 "..3...B.78.D.6.."
01295 "......1...9...BE"
01296 "C..1D..6B5..7.A4"
01297 "...5.F.98..32.DG"
01298 "3.....C..D.A5.E."
01299 "....3B5.F7...9.."
01300 "..5...6C.2AE...."
01301 ".3.BE.2..4.....9"
01302 "F9.2A..B5.7.G..."
01303 "EA.G..756..BD..1"
01304 "6C...8...9......"
01305 "..9.6.47.E...D.."
01306 "2GE......C6...F."
01307 "...3.CG.2.D.65.."
01308 ,
01309
01310
01311
01312 ".....D5..7.169.."
01313 "..4..2BE8.G..A.."
01314 "8DA....752..BGF."
01315 "G.9EA.86..3F2..."
01316 "C..4G1.....7F..."
01317 ".G.A...315.6..C8"
01318 "E.5..F7.4G..1.A2"
01319 ".91..BE...D.54G."
01320 ".68D.3...C5..B9."
01321 "4E.5..9B.31..F.G"
01322 "3B..E.G1A...C.4."
01323 "...95.....F83..7"
01324 "...C9G..F1.5D8.B"
01325 ".468..DFC....3E5"
01326 "..2..E.A7DB..C.."
01327 "..EFB.3..86....."
01328 ,
01329
01330
01331
01332 ".BC..32...9..D.."
01333 ".3..CB...52A.9E4"
01334 "7E.A...D8.6B2..5"
01335 "..9F..A.DC7.B6.."
01336 ".15..2.E..3...4."
01337 "4GD81.3C...7..6F"
01338 ".C.9....E.4.G..1"
01339 "..E3..59G.FD.B.."
01340 "..A.2E.FC9..84.."
01341 "B..E.9.4....F.A."
01342 "16..A...57.F3E9B"
01343 ".9...6..4.E..7G."
01344 "..64.C85.2..DA.."
01345 "E..DB1.23...6.59"
01346 "C5G.9D4...1E..2."
01347 "..2..F...DA..CB."
01348 ,
01349
01350
01351
01352 "G.E37..1.....6.."
01353 "96..E..3..G5D.F."
01354 ".7..64.CF31..29E"
01355 "....F...8.9E437."
01356 "6AF...D.3..1...."
01357 "..1...B5.8F47..3"
01358 ".83B2.47.G....61"
01359 "..79.6...EC..8.G"
01360 "E.C..2A...8.FG.."
01361 "25....C.GA.78B4."
01362 "7..AD3F.24...E.."
01363 "....G..B.1...C52"
01364 ".4A2B5.D...8...."
01365 "FE8..G2A1.73..C."
01366 ".C.78F..4..2..E5"
01367 "..9.....E..G34.8"
01368 ,
01369
01370
01371
01372 ".G.4..1E6.9...2."
01373 ".D..4G.C.....9F7"
01374 "..79.D...5C.B.G."
01375 ".EFC7...G..D.5.3"
01376 "5...C...E6BFD..."
01377 "...1...5..D.CB.2"
01378 "7.CG29.D3...E8.F"
01379 "94...EGB.2.C...."
01380 "....E.2.583...CD"
01381 "3.D5...89.FB7G.E"
01382 "4.1E.F..A...3..."
01383 "...F1B3G...E...9"
01384 "F.9.8..1...G23D."
01385 ".A.B.4D...7.5F.."
01386 "8CE.....1.25..7."
01387 ".7...5.3F9..G.8."
01388 ,
01389
01390
01391
01392 "...4.1.9..7...B5"
01393 "6E..2.8....CGA.."
01394 ".51....B.D....6."
01395 "B.9..E..G..A...7"
01396 "..7.5F9G..48...."
01397 "..29..3..F..5.7."
01398 "G.BD...837.E..94"
01399 "......7E.1.6A2G3"
01400 "94GA7.2.63......"
01401 "5B..A.E18...79.2"
01402 ".1.8..6..4..BD.."
01403 "....G8..EB92.4.."
01404 "D...9..A..1..G.6"
01405 ".3....4.C....1E."
01406 "..4B6....E.7..2A"
01407 "F9...5..A.3.4..."
01408 ,
01409
01410
01411
01412 ".G..5.2.E.FA.4C."
01413 "AB..G....35.17D9"
01414 "53..4AC..DB....."
01415 ".6.C3B..2.8.5..."
01416 "1...A....E.D9CG3"
01417 "GDA9.4..B.1.6E.."
01418 ".FB.1..E9....D.8"
01419 "C..3.59G48......"
01420 "......F38G2.7..4"
01421 "6.3....A7..9.8E."
01422 "..CE.9.1..4.DG35"
01423 "89GD2.4....6...C"
01424 "...G.C.4..958.7."
01425 ".....1A..F78..42"
01426 "4871.3G....2..9A"
01427 ".C9.72.8.6.4..1."
01428 ,
01429
01430
01431
01432 "A...18..79..C..6"
01433 ".37.A2...FD...E9"
01434 "G14D..5...8C.A.."
01435 ".268.E7.3A....D5"
01436 "3...D1...7A2.8.4"
01437 "7CF.9..4....D.2."
01438 "5..63.A28...1CF."
01439 "...1.6...3FD..5."
01440 ".A..FC6...9.3..."
01441 ".D2F...3A5.1E..8"
01442 ".9.G....D..7.F1C"
01443 "E.C.G9D...3F...7"
01444 "17....9B.2E.43C."
01445 "..9.E3...C..5D7F"
01446 "FE...AC...G5.29."
01447 "D..C..2F..73...E"
01448 ,
01449
01450
01451
01452 "3.8.BD..5F72E..6"
01453 "..G..4.7E..6F5.."
01454 ".AF.2..C....9G73"
01455 "59C...FE.AG....."
01456 "C5..1..F.4.G.E.7"
01457 "F..2.C..B13...GD"
01458 "4..B73.D....C..."
01459 "GD...A...C.7B48."
01460 ".G5FD.3...9...BE"
01461 "...C....6.E1G..9"
01462 "28...7E1..B.6..4"
01463 "1.B.5.C.3..8..AF"
01464 ".....ED.16...345"
01465 "9C21....7..A.8E."
01466 "..EA9..3F.8..7.."
01467 "6..5827A..4D.F.C"
01468 ,
01469
01470
01471
01472 "1.....6C.4G.9BA."
01473 ".G6..F.9A.D1...2"
01474 "...D7G.3F...41.."
01475 ".3A.2..1.759.E.G"
01476 "B8..D.F.C.2.A..."
01477 "C....1..DBFA2..5"
01478 "..FG.E.....58C9."
01479 ".25A3.C.G..E...1"
01480 "3...4..B.G.DE78."
01481 ".C78A.....3.12.."
01482 "5..1FC37..E....9"
01483 "...4.2.8.F.B..CA"
01484 "A.4.6B7.5..F.9D."
01485 "..8C...DB.975..."
01486 "9...85.E3.A..46."
01487 ".5D7.A9.E2.....8"
01488 ,
01489
01490
01491
01492 "..D.2...5A1....F"
01493 "E21F..9..6.D...G"
01494 "7A.9G1..2E.4D..8"
01495 ".B64.3FA...8.E.2"
01496 "...3...F...G2A.."
01497 ".F7...5.8D4.B.3."
01498 "4....C.....F8.D1"
01499 ".G....B3A2.....6"
01500 "3.....4CF8....6."
01501 "94.B1.....D....E"
01502 ".C.A.E8D.B...15."
01503 "..G8B...1...C..."
01504 "B.A.8...6F2.3DE."
01505 "2..16.E5..A39.84"
01506 "6...9.3..5..1C2B"
01507 "8....D12...9.6.."
01508 ,
01509
01510
01511
01512 "3....2A.4F.6..G1"
01513 "ADF4..3..5....E."
01514 "..5G..1E....FAB."
01515 "..E.GF75..B..93."
01516 "B...17...A629..."
01517 "...EFG..7.516..C"
01518 "63..D...G...E42F"
01519 "2....8639...1G.."
01520 "..B8...76G2....E"
01521 "5C32...4...E..1G"
01522 "G..62E.9..D4B..."
01523 "...D5CG...A3...7"
01524 ".G7..5..84F9.B.."
01525 ".F6B....5E..21.."
01526 ".5....B..6..7EF9"
01527 "E4..A.9F.BC....5"
01528 ,
01529
01530
01531
01532 "B........45DC.6A"
01533 "4.F...639.CA.E.."
01534 ".9A...CD26.8F1B."
01535 "6.C3.7.8.F..9..."
01536 "D68.E..B...5...."
01537 "73...8A5..9.2..."
01538 "A.G1..9..26..D8."
01539 ".C9.......81A6E."
01540 ".574FA.......G1."
01541 ".AD..37..G..4F.E"
01542 "...9.G..452...CD"
01543 "....B...F..9.725"
01544 "...B..G.C.F.12.9"
01545 ".16AC.5FG3...8D."
01546 "..2.36.759...C.F"
01547 "F8.C194........6"
01548 ,
01549
01550
01551
01552 "C..B61..G...F.AE"
01553 "4E8F...A.....DG."
01554 ".D..F3.E1.5A..6."
01555 "5.....GBE9FC..82"
01556 "..5EB.D8...1.F.6"
01557 "..AD.72...6..3.8"
01558 "...3..E.9FB85..."
01559 "6.B4..1....2CAE."
01560 ".3E9C....G..D1.7"
01561 "...CEG3D.7..A..."
01562 "A.F..B...CD.EG.."
01563 "D.7.1...B2.348.."
01564 "FG..8EB17A.....3"
01565 ".4..D6.G3.CE..5."
01566 ".62.....D...74CA"
01567 "3B.A...4..9F8..G"
01568 ,
01569
01570
01571
01572 "...E.6DB...2.8.."
01573 "....5G.3.9F8C1.."
01574 "981....FG....7.."
01575 ".3.F8....65.2..9"
01576 "3G....4A5D..7.F."
01577 ".A.D...2......64"
01578 ".2.4C.F..A.G...3"
01579 "..F.D.....6C.21E"
01580 "1F9.B2.....E.D.."
01581 "4...E.3..B.DF.2."
01582 "5E......9...3.C."
01583 ".D.3..8142....5A"
01584 "2..5.D6....F1.A."
01585 "..4....86....EDG"
01586 "..3CGFB.E.DA...."
01587 "..G.3...279.6..."
01588 ,
01589
01590
01591
01592 "3....1G..5.7.A4."
01593 "FE7C.3.9.......G"
01594 ".8.....5D9G.C..3"
01595 "5G.A6....38.FD7."
01596 "...5G.94.8.27C.."
01597 ".98.E.5C.G......"
01598 "4....7.25.CB.6.A"
01599 "2A.F.......6.5G."
01600 ".F3.5.......4.DB"
01601 "C.B.98.AF.7....6"
01602 "......6.2D.C.9E."
01603 "..6G4.B.81.9A..."
01604 ".D53.C8....E6.97"
01605 "A..2.D467.....5."
01606 "8.......4.9.32B1"
01607 ".4F.2.3..61....C"
01608 ,
01609
01610
01611
01612 "..E3.7.1.5.6.B.."
01613 "....G85B92.FE..."
01614 "C...4.36A......2"
01615 ".4.BA......G7..C"
01616 "48.2E...5G.9ADB."
01617 ".....B...C4...9E"
01618 "9A..F42.E1...5C."
01619 ".5C.7.9G8....413"
01620 "BE8....26A.C.G3."
01621 ".FD...7E.931..56"
01622 "AC...G6...2....."
01623 ".1369.85...BD.A7"
01624 "E..A6......5C.7."
01625 "3......A7F.E...5"
01626 "...51.G7CDA2...."
01627 "..G.C.B.3.1.9A.."
01628 ,
01629
01630
01631
01632 "G..B..12....73.C"
01633 "..8DB.7CG9A....."
01634 "6.3...D...4E.8B."
01635 "4...38G.21....AD"
01636 "..F.........E.6."
01637 ".E6..75DFG3.B..."
01638 ".7.G.F916EB.4583"
01639 ".B.3.E2..89...F1"
01640 "74...3E..62.5.1."
01641 "9852.CB7DFE.3.G."
01642 "...A.56F431..C9."
01643 ".F.6.........E.."
01644 "C1....F4.B5G...E"
01645 ".D4.EG...2...9.8"
01646 ".....D8974.1CA.."
01647 "B.A7....ED..F..4"
01648 ,
01649
01650
01651
01652 "7B..9C.3..6.A.2E"
01653 "4.2...67A..53..D"
01654 ".....ADE.CB.4.5."
01655 "AD8....B7.F....."
01656 ".C...1.A.9.....8"
01657 "F.E8...C.4.D.6.2"
01658 "..D.59.......1A."
01659 ".1.2......7FBDC3"
01660 "BF6EC4......2.7."
01661 ".53.......C2.E.."
01662 "D.G.2.A.5...F3.C"
01663 "2.....1.B.3...8."
01664 ".....F.43....CD7"
01665 ".8.G.E7.C25....."
01666 "C..DG..1F7...2.A"
01667 "E7.A.6..9.18..B5"
01668 ,
01669
01670
01671
01672 ".21..BD...EF6G.."
01673 "..6.5.F....D.8.E"
01674 "G4.....EB.7.1.D3"
01675 "C.D..37G..61...."
01676 "AB.D8..9.1.E..F."
01677 "6.F4..G..D..8..B"
01678 "....BD.1F.8.7.C9"
01679 "..3...6..G.BED.."
01680 "..B91.C..E...A.."
01681 "47.2.6.A3.1G...."
01682 "8..3..E..B..F1.G"
01683 ".1..7.3.D..C9.25"
01684 "....GF..28B..4.A"
01685 "5A.8.4.B1.....GF"
01686 "D.2.C....F.6.7.."
01687 "..41DA...7G..C9."
01688 ,
01689
01690
01691
01692 ".B...7..4D..E13."
01693 "D......6G.E7...F"
01694 "8.6F....B....7.."
01695 "7...91D..F8C.B.."
01696 ".F.G8.1.3..27..."
01697 ".1.6.4329.7.F..D"
01698 "3..7..5..GBD8..."
01699 "48D.CE....A...9."
01700 ".3...G....C4.9EB"
01701 "...148C..3..A..2"
01702 "9..4.6.7FA5.C.G."
01703 "...EF..5.1.B6.D."
01704 "..5.ABG..7F9...6"
01705 "..3....F....18.E"
01706 "G...E5.32......9"
01707 ".6FB..89..3...C."
01708 ,
01709
01710
01711
01712 "...FDAE..6.1.3B."
01713 "1..C...9.D34.6.."
01714 "8A3.4.....2E7C.."
01715 "..DG.3......8.5E"
01716 "3F2.C.....8B.5.9"
01717 ".DE.8..B2C..A..4"
01718 "C8...1.........6"
01719 ".....D.31.5...E."
01720 ".G...E.84.D....."
01721 "A.........1...43"
01722 "D..E..17C..2.FG."
01723 "2.5.AF.....9.D7B"
01724 "73.2......6.B4.."
01725 "..483B.....D.A61"
01726 "..A.14F.B...5..C"
01727 ".1C.6.D..24A9..."
01728 ,
01729
01730
01731
01732 "4.8CB9G...D..FA2"
01733 "G..18..A96...E.."
01734 "F9....ED..8....B"
01735 "...D73...2F.G.81"
01736 ".......2....C.F9"
01737 "3.D7.E6...9.4..A"
01738 ".C.4..D9.GA..3.7"
01739 ".2.......7.3.65."
01740 ".3B.5.2.......D."
01741 "6.4..G8.FC..B.2."
01742 "E..G.B...D2.18.F"
01743 "CD.2....3......."
01744 "D1.B.8F...C9E..."
01745 "2....D..1B....G5"
01746 "..5...17D..G9..C"
01747 "7E9..C...468FD.3"
01748 ,
01749
01750
01751
01752 "D.B.8.4..5G..2.9"
01753 ".C..6.3...D1.7B."
01754 "GE4.B..52A..FD.C"
01755 "..7.2..E.F9....."
01756 ".2..4....3.D9GEF"
01757 "43.7..A..8......"
01758 "5.ABGD.F..1...37"
01759 "..E......7..6B.."
01760 "..2E..G......3.."
01761 "C5...B..D.F971.8"
01762 "......5..2..C.GE"
01763 "348GD.C....7..5."
01764 ".....91.8..F.6.."
01765 "1.G2..F65..E.89B"
01766 ".8C.54...1.G..F."
01767 "F.5..87..9.A.C.1"
01768 ,
01769
01770
01771
01772 "..EF96...8.5B.C."
01773 "D...FE....1.2A.."
01774 ".86..2..C...57.1"
01775 "C21...BD9..E...3"
01776 "5..1.C...6....DA"
01777 ".G.....7.E.1.5BC"
01778 "B...D1..8...7..."
01779 "..9D..A27.3.E..."
01780 "...3.A.E5B..6F.."
01781 "...5...C..83...B"
01782 "FDB.2.9.6.....5."
01783 "61....5...E.G..9"
01784 "4...8..3B7...EA2"
01785 "E.26...A..G..CF."
01786 "..58.D....4F...G"
01787 ".B.7C.2...5AD9.."
01788 ,
01789
01790
01791
01792 "..2..DA6.38.14.."
01793 "...5.F..2......."
01794 "6.8.2.G.....7A.B"
01795 "A.F.....65.G..D."
01796 "...6.8E.52...B.."
01797 "7....2.F.G39..8E"
01798 "8..3679..4.C.1.G"
01799 ".B.EG..18.A....7"
01800 "1....A.8C..FG.3."
01801 "E.A.1.3..D42B..5"
01802 "97..CG6.1.B....4"
01803 "..3...2D.E6.A..."
01804 ".C..B.74.....5.A"
01805 "B.68.....C.7.D.F"
01806 ".......A..1.2..."
01807 "..4A.C8.E6G..7.."
01808 ,
01809
01810
01811
01812 "A..95.B.G...8.FD"
01813 "G.D...6FB...A5.."
01814 ".B...1D83.A9G.7."
01815 "F68....G5..1...C"
01816 "..28DA9..5FC...G"
01817 "..G.87.2.A4D.6.."
01818 "....3F.....E.CD9"
01819 "9C5D......G.FA8."
01820 ".71B.6......5842"
01821 "D5F.B.....26...."
01822 "..9.127.F.85.D.."
01823 "2...E35..CB719.."
01824 "6...F..BE....734"
01825 ".F.ECD.3479...2."
01826 "..AG...9C1...F.8"
01827 "39.5...1.D.FB..A"
01828 ,
01829
01830
01831
01832 "....G5D.C1...B2."
01833 "6...E.BC.G..D8.."
01834 "D13C..7..4..5G.."
01835 ".72B48..5.6.C9.."
01836 "....B9E....F4.12"
01837 "...A..FD7B.C8..3"
01838 "E6F..1....G3.DB9"
01839 "B..4.2.89.1...G."
01840 ".5...7.ED.C.G..8"
01841 "C9D.14....E..A35"
01842 "8..2D.591A..6..."
01843 "7G.36....259...."
01844 "..6D.E.5..B4A27."
01845 "..95..2..8..B3D4"
01846 "..7G..4.6E.5...F"
01847 ".B8...97.C32...."
01848 ,
01849
01850
01851
01852 "D...9A..6.F4.3.C"
01853 "....B6..5A.E9D.."
01854 "6E5......D..7F.."
01855 ".3G9..FDC...4..."
01856 "16..AF4..C.7..58"
01857 "G....1..A.B8..F9"
01858 ".7C.3..8...F6..."
01859 "A8.F.G.C43..2..."
01860 "...7..9E3.D.8.4F"
01861 "...8G...9..5.6C."
01862 "59..F3.4..C....G"
01863 "4F..6.D..B7A..2E"
01864 "...D...BE9..G86."
01865 "..2G..3......BE5"
01866 "..E48.6A..2C...."
01867 "3.8.E5.F..AD...4"
01868 ,
01869
01870
01871
01872 "...B562E.1G....."
01873 ".D27A...4...56B."
01874 ".G6..B.C..2..E7."
01875 ".1.C..7.DB..3.42"
01876 "....37.2E..G..64"
01877 "D.3..5..C.A8.G.1"
01878 "C..A...F9...D..3"
01879 ".2.FDG8..3.4.5.E"
01880 "2.8.F.4..CEBG.5."
01881 "E..D...G5...C..B"
01882 "1.5.2C.D..9..F.8"
01883 "FC..E..5G.81...."
01884 "A3.5..G8.9..6.E."
01885 ".F4..A..2.1..39."
01886 ".E16...3...C42G."
01887 ".....E1.763AF..."
01888 ,
01889
01890
01891
01892 "A.5.FB.C...7..3."
01893 "G38....D.C.EB5.."
01894 "..F...3.9G8..D7."
01895 "...E.2.4.A.59.FG"
01896 "8..A..6.3F7D5..."
01897 "B..4....5...DEA."
01898 "61..BD75..E....."
01899 ".5C.1E.A.8....62"
01900 "C8....E.7.62.GD."
01901 ".....A..D95F..84"
01902 ".D41...6....2..7"
01903 "...928D1.E..3..C"
01904 "57.3E.A.8.9.C..."
01905 ".21..C58.4...F.."
01906 "..6C9.1.2....AEB"
01907 ".A..D...G.1C.4.5"
01908 ,
01909
01910
01911
01912 "...E9.5..6.G...F"
01913 ".6.4.3.G...7.1.B"
01914 ".37A.E..49.5C..."
01915 "9....C76.32E.548"
01916 ".E...4..DG9.2..."
01917 ".4...562C...G8.."
01918 ".G93..1B5F.2.C.7"
01919 "C1.639.A.......5"
01920 "D.......2.496.8G"
01921 "6.3.F.9EG5..B2C."
01922 "..AB...86EC...3."
01923 "...9.2C1..B...D."
01924 "7A1.462.3B5....D"
01925 "...D5.89..G.1BA."
01926 "E.5.G...9.6.F.2."
01927 "4...B.E..D.87..."
01928 ,
01929
01930
01931
01932 ".FE6.A.8......1."
01933 "145..7.E..F...68"
01934 "...C.4..EG82..5F"
01935 "....5FD.7B1..C.4"
01936 "..4.82A.C..1B..."
01937 ".8C7..5....AD24G"
01938 "..1F..9.G83BA..."
01939 "..A9F.E6D.....71"
01940 "F9.....53C.718.."
01941 "...321CD.6..74.."
01942 "A1726....4..GFC."
01943 "...49..F.1A8.E.."
01944 "D.F..62B.593...."
01945 "4B..D83A..2.5..."
01946 "87...5..B.4..936"
01947 ".6......8.7.CBD."
01948 ,
01949
01950
01951
01952 "...84......D.1F7"
01953 ".6.C..A.4G.....9"
01954 "..945.G.8.F..3A."
01955 "...7CFD2.3...E.G"
01956 "..6B..58..G....."
01957 "8.7..G.C9.4A1..E"
01958 "C..EA3.9...5.GD."
01959 ".F...2.....B3.8A"
01960 "AB.6F.....C...9."
01961 ".7E.B...5.16G..3"
01962 "1..G79.3A.D..C.5"
01963 ".....1..7E..AB.."
01964 "3.4...8.E792B..."
01965 ".E8..D.B.A.359.."
01966 "5.....1A.D..E.3."
01967 "69D.2......C7..."
01968 ,
01969
01970
01971
01972 "CD.E9.8......6.."
01973 ".62..3...E..85.7"
01974 ".G...6...AF5...D"
01975 "....D54.39.8...E"
01976 "6FB..ED4...G.1.."
01977 "4.A.5..2D......G"
01978 ".C.1...GF53A2..6"
01979 ".2.3.A.1....F..."
01980 "...2....4.B.9.6."
01981 "3..6G8E95...4.2."
01982 "G......D9..3.F.8"
01983 "..4.2...68A..GC3"
01984 "A...1.3E.D9C...."
01985 "E...49C...5...1."
01986 "2.9D..A...8..3F."
01987 "..8......2.7A.E5"
01988 ,
01989
01990
01991
01992 "D..6..1.2C3....8"
01993 "..1..386..5..9.."
01994 ".8C2......DGBF1."
01995 "..5.G......1.A.D"
01996 "..A876..4..C5..."
01997 "64F...AD.2.5..C."
01998 "E....1B9.6A...24"
01999 "B...4....8G...7."
02000 ".7...BD....6...9"
02001 "FG...C9.1D4....A"
02002 ".5..E.6.G7...1DC"
02003 "...BF..G..2A37.."
02004 "5.8.6......D.3.."
02005 ".E2D5A......7CF."
02006 "..7..9..A51..4.."
02007 "9....DC1.4..E..5"
02008 ,
02009
02010
02011
02012 "8D...6E...A2...."
02013 "E9.6....4..D.537"
02014 "..539C.2..7.A4.."
02015 "..B2G..5......6D"
02016 ".F....G9CB84...."
02017 "21.D.F5..7.EB.G6"
02018 "983..47.65...A.2"
02019 ".7.C6....A..3954"
02020 "C698..1....54.7."
02021 "F.A...46.82..D9G"
02022 "42.5B.C..3G.6.8F"
02023 "....5E28F9....A."
02024 "7B......G..1C3.."
02025 "..F4.5..B.3AG6.."
02026 "35E.C..A....7.49"
02027 "....D1...FC...25"
02028 ,
02029
02030
02031
02032 "6D.5F.B83..7...."
02033 ".F.761...854.A.."
02034 "39.8.D..B..EF.6."
02035 "..E.3.956F...CB1"
02036 "F65......GBA...2"
02037 "...3.6C7D9...8.B"
02038 "..DE..82F.7...5."
02039 "B.7.DF....3.619."
02040 ".A9B.5....81.F.6"
02041 ".3...E.BG5..12.."
02042 "C.G...DF7B9.A..."
02043 "5...1C6......B84"
02044 "7E6...F91A.B.3.."
02045 ".5.9A..D..6.B.2E"
02046 "..A.BG5...F97.1."
02047 "....2..65E.8C.AF"
02048 ,
02049
02050
02051
02052 "F.....8.43..BGD6"
02053 "6E..G29....C3.7."
02054 "2.1..D7.5.E..C.."
02055 "89.4...C7.612..."
02056 ".1.F..DAEB5...8."
02057 "..6AF34...D..E1."
02058 "E...B..5..8G.493"
02059 "7.892....4.3D..."
02060 "...1E.A....F63.C"
02061 "D6E.89..G..5...1"
02062 ".G3..F...91E78.."
02063 ".F...1GB36..E.A."
02064 "...87G.6C...4.FA"
02065 "..7..8.1.FB..6.2"
02066 ".D.GA....134..CE"
02067 "C2A6..F3.5.....D"
02068 ,
02069
02070
02071
02072 "...439.27..5..G."
02073 "5C67...A93...2D."
02074 ".3B...1D...2.78."
02075 "...2.G7.8EA.3.5F"
02076 "E.C.A23....D...7"
02077 "...D.B..G7F81..6"
02078 ".G.1.68.2A.ECD.."
02079 "F8.6.4G......AE5"
02080 "643......DB.F.2E"
02081 "..586.4C.F2.D.B."
02082 "B..F8A2G..3.7..."
02083 "7...E....894.C.A"
02084 "D7.3.1B4.CE.9..."
02085 ".F4.9...B2...6C."
02086 ".BG...67D...4E13"
02087 ".6..F..31.4AB..."
02088 ,
02089
02090
02091
02092 ".1B.....2.59F.6G"
02093 "G.2341A...BF...."
02094 "C.E8....3..D.24."
02095 "F....9E..1...B38"
02096 "..1.F45.6.3.2..9"
02097 "3..E.8C.5D..1..."
02098 "....DB..A8...FE3"
02099 ".4.93.1.E..G.8D."
02100 ".GF.C..7.5.69.8."
02101 "BDC...F1..A8...."
02102 "...5..94.21.G..C"
02103 "E..1.5.8.FC3.D.."
02104 "1B4...8..92....6"
02105 ".A8.9..C....45.B"
02106 "....12...6853A.F"
02107 "5C.27A.B.....91."
02108 ,
02109
02110
02111
02112 "A57...8E4......9"
02113 ".4C85.6....9.E3B"
02114 ".E1...3G657..AC8"
02115 "...F.1.9.8EA5.7."
02116 ".8.5.7...4F...2."
02117 "..9316....BG8..."
02118 "..E2A..4.....D97"
02119 "F.4....856..G1.3"
02120 "6.84..ECB....F.5"
02121 "5FA.....C..637.."
02122 "...7F4....1528.."
02123 ".2...35...8.C.1."
02124 ".9.13E2.8.4.A..."
02125 "BD2..G4FAC...98."
02126 "8G5.C....D.EF3B."
02127 "4......57B...2G6"
02128 ,
02129
02130
02131
02132 "..8.A.F.B97.1.6."
02133 "1B79...6.....8E."
02134 "..E3..928...D.5."
02135 "26..8.B....17..."
02136 "91..6A2..B3..D.."
02137 ".F..37.52.GD.4.."
02138 "3.679...5.EF...A"
02139 "4.B..FC..16...G5"
02140 "73...8A..5D..F.1"
02141 "5...FC.3...98G.E"
02142 "..F.D5.13.A8..B."
02143 "..A..B6..2FG..7D"
02144 "...6B....E.2..1C"
02145 ".4.F...A1D..GE.."
02146 ".A2.....G...4638"
02147 ".7.G.28F.6.3.A.."
02148 ,
02149
02150
02151
02152 ".2ED.4...C...F.."
02153 ".8.FE.6.1.....A4"
02154 "A..7.8F.29.B...C"
02155 "....3GCB...5.87D"
02156 "..45DA..B7F3C.6."
02157 "....G...4..CA2.5"
02158 "2.7.F..CG...34B."
02159 ".ED.B54381..G..."
02160 "...4..825GBE.3F."
02161 ".B5G...63..F.C.1"
02162 "1.F27..E...4...."
02163 ".D.84FG5..167B.."
02164 "3C1.2...DB8G...."
02165 "D...6.59.F3.8..2"
02166 "4G.....F.A.71.C."
02167 "..8...B...9.ED3."
02168 ,
02169
02170
02171
02172 "5....E...7B..CF2"
02173 "AF.467....3...D."
02174 "D.E.C.3....8.7.."
02175 "....8..DA6.E..5."
02176 "..3B....4.A.EF1."
02177 "69..B.D.3.....C7"
02178 "1..G...49.C..6.."
02179 "...D12G5FE..B..."
02180 "...7..93285AF..."
02181 "..8..4.76...2..G"
02182 "96.....F.3.B..84"
02183 ".AB3.G.6....95.."
02184 ".1..F.69E..2...."
02185 "..9.G....F.3.2.E"
02186 ".E...D....95G.BF"
02187 "2G7..C5...4....3"
02188 ,
02189
02190
02191
02192 ".3.B8..C61...2.."
02193 ".E.2...F..4.1A67"
02194 "71D...A...C..B.."
02195 ".6...92D.B.3..45"
02196 "...8A...C.F4...3"
02197 ".F9.75E4..B.6..."
02198 "5..1...8..6.4F.."
02199 "4...C....EA.B.2G"
02200 "2D.7.E5....6...1"
02201 "..BA.D..9...G..8"
02202 "...E.1..G2DF.59."
02203 "6...4C.B...73..."
02204 "A2..B.C.46E...7."
02205 "..1..2...9...8AD"
02206 "DC75.A..3...E.B."
02207 "..8...GEA..C2.5."
02208 ,
02209
02210
02211
02212 "B62...9...1...G7"
02213 "C.....7.6..A.1.9"
02214 ".1....A8..7.2..3"
02215 "..A831.CG2..E..."
02216 ".8..92.A..GD4..."
02217 "G.C.D8..F.529..."
02218 "...4.........D6A"
02219 ".5.B.C.17..3G8.."
02220 "..E12..9D.B.6.8."
02221 "9C7.........5..."
02222 "...A54.7..2C.F.G"
02223 "...FCD..4.A5..9."
02224 "...9..1E2.F83C.."
02225 "1..7.9..A3....D."
02226 "2.3.8..B.5.....6"
02227 "EB...3...7...G12"
02228 ,
02229
02230
02231
02232 "..6..1..4..F3.A."
02233 "7E..6G.3....FC.."
02234 "BC3..FD.6.9.G..2"
02235 ".....4E.CG3.B..."
02236 "1.E..C.....2.A.."
02237 "...AE6...4F..9.3"
02238 ".8.2..3F.C.1...."
02239 "34..8...B57..EC."
02240 ".B9..3CD...8..E5"
02241 "....9.F.GA..4.1."
02242 "A.4..E2...6BC..."
02243 "..8.A.....E..7.B"
02244 "...C.2A6.EB....."
02245 "E..8.9.5.3C..62G"
02246 "..B9....2.GD..5C"
02247 ".3.5C..E..1..4.."
02248 ,
02249
02250
02251
02252 ".FA..5...B7..E.6"
02253 "18....4B...C..G."
02254 "..G.7..CF....8.5"
02255 ".B9CG8.........."
02256 ".D..A.G..85....E"
02257 "69..3...1...C5.."
02258 "7.4B....G.A.2..F"
02259 "..8.5B6D..27...."
02260 "....8G..EC61.D.."
02261 "3..6.C.7....91.8"
02262 "..DF...5...9..73"
02263 "8....6B..2.5..E."
02264 "..........14EFD."
02265 "9.6....AD..F.7.."
02266 ".E..6...29....1C"
02267 "G.2..EF...C..4B."
02268 ,
02269
02270
02271
02272 ".3..6GF..C8....."
02273 "G..9.B.8...5.A74"
02274 "7..8.2..B..D...."
02275 ".EA.....3.6..9B."
02276 "..F.2....3AG...."
02277 "E7...........39G"
02278 ".9.A..31E6..FC.."
02279 "4.3..D.9C.B....E"
02280 "6....8.4A.2..G.C"
02281 "..G3..CFD9..4.A."
02282 "A85...........FB"
02283 "....5A7....6.2.."
02284 ".24..7.D.....16."
02285 "....1..3..C.2..8"
02286 "1A7.C...6.3.E..9"
02287 ".....6E..1F2..3."
02288 ,
02289
02290
02291
02292 "....47.....9B.1."
02293 "..5..9F2.6....43"
02294 "B..3.....E24..9."
02295 "..9.....A57..2.."
02296 ".DA4E..7...C.F.."
02297 ".1.6..4.E....8.B"
02298 "....81BF..4.5..7"
02299 "...F9A....D..E.4"
02300 "5.2..3....A71..."
02301 "6..C.B..G9FE...."
02302 "7.8....9.D..C.3."
02303 "..G.6...1..3E45."
02304 "..F..E8D.....A.."
02305 ".2..741.....3..8"
02306 "D6....5.92B..1.."
02307 ".A.EB.....C6...."
02308 };
02309
02311 const unsigned int n_examples = sizeof(examples)/sizeof(char*);
02312
02314 int example_size(const char *s) {
02315 int l = std::strlen(s);
02316 int res = static_cast<int>(std::sqrt(std::sqrt(static_cast<float>(l))));
02317 assert(res*res*res*res == l);
02318 return res;
02319 }
02320
02322 int sudokuField(const char *s, int n, int i, int j) {
02323 assert(example_size(s) == std::sqrt(static_cast<float>(n)));
02324 assert(i >= 0 && i < n);
02325 assert(j >= 0 && j < n);
02326 char c = s[j*n + i];
02327 if (!std::isalnum(c))
02328 return 0;
02329 if (std::isdigit(c))
02330 return c - '0';
02331 if (std::islower(c))
02332 c = static_cast<char>(std::toupper(c));
02333
02334 int res = (c - 'A') + 10;
02335 if (res > n) return 0;
02336 else return res;
02337 }
02339 }
02340
02341