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