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