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