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