├── output.txt ├── __pycache__ ├── CSP.cpython-36.pyc ├── helper.cpython-36.pyc └── Backtrack.cpython-36.pyc ├── helper.py ├── .gitattributes ├── .gitignore ├── wrapper.py ├── wrapperAC3.py ├── CSP.py ├── driver_3.py ├── AC3.py ├── README.md ├── Backtrack.py └── data ├── sudokus_finish.txt └── sudokus_start.txt /output.txt: -------------------------------------------------------------------------------- 1 | 483921657967345821251876493548132976729564138136798245372689514814253769695417382 2 | -------------------------------------------------------------------------------- /__pycache__/CSP.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrinidhiRaghavan/AI-Sudoku/HEAD/__pycache__/CSP.cpython-36.pyc -------------------------------------------------------------------------------- /__pycache__/helper.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrinidhiRaghavan/AI-Sudoku/HEAD/__pycache__/helper.cpython-36.pyc -------------------------------------------------------------------------------- /__pycache__/Backtrack.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrinidhiRaghavan/AI-Sudoku/HEAD/__pycache__/Backtrack.cpython-36.pyc -------------------------------------------------------------------------------- /helper.py: -------------------------------------------------------------------------------- 1 | # INCLUDES THE HELPER FUNCTIONS AND VARIABLES USED BY THE PROGRAM 2 | 3 | 4 | digits = cols = "123456789" 5 | rows = "ABCDEFGHI" 6 | 7 | 8 | #FINDING THE CROSS PRODUCT OF TWO SETS 9 | def cross(A, B): 10 | return [a + b for a in A for b in B] 11 | 12 | squares = cross(rows, cols) 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | -------------------------------------------------------------------------------- /wrapper.py: -------------------------------------------------------------------------------- 1 | # THE WRAPPER FUNCTION WHICH SOLVES ALL THE SUDOKU PROBLEMS IN THE INPUT FILE USING BACKTRACKING AND WRITES THE OUTPUT TO THE OUTPUT FILE 2 | 3 | import sys #For getting the values from command line 4 | from CSP import csp 5 | from Backtrack import * 6 | import time 7 | 8 | #THE MAIN FUNCTION GOES HERE 9 | if __name__ == "__main__": 10 | ''' 11 | The function takes arguments from commandline 12 | Argument 1 - Python file name 13 | Argument 2 - Input String Showing the Sudoku 14 | ''' 15 | array = [] 16 | with open("sudokus_start.txt", "r") as ins: 17 | for line in ins: 18 | array.append(line) 19 | 20 | ins.close() 21 | i = 0 22 | boardno = 0 23 | start = time.time() 24 | f = open("output.txt", "w") 25 | 26 | for grid in array: 27 | startpuzle = time.time() 28 | boardno = boardno + 1 29 | sudoku = csp(grid=grid) 30 | solved = Backtracking_Search(sudoku) 31 | print ("The board-", boardno, " takes ", time.time() - startpuzle, " seconds") 32 | if solved!="FAILURE": 33 | f.write(write(solved)+"\n") 34 | i = i + 1 35 | f.close() 36 | 37 | print ("Number of problems solved is: ", i) 38 | print ("Time taken to solve the puzzles is: ", time.time()-start) -------------------------------------------------------------------------------- /wrapperAC3.py: -------------------------------------------------------------------------------- 1 | # THE WRAPPER FUNCTION WHICH SOLVES ALL THE SUDOKU PROBLEMS IN THE INPUT FILE USING AC3 AND WRITES THE OUTPUT TO THE OUTPUT FILE 2 | 3 | 4 | import sys #For getting the values from command line 5 | import time 6 | from CSP import csp 7 | from AC3 import * 8 | 9 | #THE MAIN FUNCTION GOES HERE 10 | if __name__ == "__main__": 11 | ''' 12 | The function takes arguments from commandline 13 | Argument 1 - Python file name 14 | Argument 2 - Input String Showing the Sudoku 15 | ''' 16 | array = [] 17 | with open("sudokus_start.txt", "r") as ins: 18 | for line in ins: 19 | array.append(line) 20 | 21 | ins.close() 22 | i = 0 23 | boardno = 0 24 | start = time.time() 25 | 26 | for grid in array: 27 | prev = time.time() 28 | sudoku = csp(grid=grid) 29 | solved = AC3(sudoku) 30 | boardno = boardno + 1 31 | if isComplete(sudoku) and solved: 32 | print (boardno) 33 | print ("Before solving: ", grid) 34 | print ("After solving: ", write(sudoku.values)) 35 | print ("Running time: ", time.time()-prev, "\n") 36 | i = i + 1 37 | 38 | 39 | print ("Number of problems solved is: ", i) 40 | print ("The complete run time is: ", time.time()-start) -------------------------------------------------------------------------------- /CSP.py: -------------------------------------------------------------------------------- 1 | # CLASS DESCRIPTION FOR CSP 2 | 3 | from helper import * 4 | 5 | class csp: 6 | 7 | #INITIALIZING THE CSP 8 | def __init__ (self, domain = digits, grid = ""): 9 | self.variables = squares 10 | self.domain = self.getDict(grid) 11 | self.values = self.getDict(grid) 12 | 13 | 14 | ''' 15 | Unitlist consists of the 27 lists of peers 16 | Units is a dictionary consisting of the keys and the corresponding lists of peers 17 | Peers is a dictionary consisting of the 81 keys and the corresponding set of 20 peers 18 | Constraints denote the various all-different constraints between the variables 19 | ''' 20 | 21 | self.unitlist = ([cross(rows, c) for c in cols] + 22 | [cross(r, cols) for r in rows] + 23 | [cross(rs, cs) for rs in ('ABC','DEF','GHI') for cs in ('123','456','789')]) 24 | 25 | self.units = dict((s, [u for u in self.unitlist if s in u]) for s in squares) 26 | self.peers = dict((s, set(sum(self.units[s],[]))-set([s])) for s in squares) 27 | self.constraints = {(variable, peer) for variable in self.variables for peer in self.peers[variable]} 28 | 29 | 30 | 31 | 32 | #GETTING THE STRING AS INPUT AND RETURNING THE CORRESPONDING DICTIONARY 33 | def getDict(self, grid=""): 34 | i = 0 35 | values = dict() 36 | for cell in self.variables: 37 | if grid[i]!='0': 38 | values[cell] = grid[i] 39 | else: 40 | values[cell] = digits 41 | i = i + 1 42 | return values -------------------------------------------------------------------------------- /driver_3.py: -------------------------------------------------------------------------------- 1 | # MAIN DRIVER PROBLEM TO SOLVE AN INPUT SUDOKU PUZZLE 2 | 3 | 4 | import sys #For getting the values from command line 5 | import time 6 | from CSP import csp 7 | from Backtrack import * 8 | #from AC3 import * #Uncomment this if you want to test AC3 9 | 10 | #THE MAIN FUNCTION GOES HERE 11 | if __name__ == "__main__": 12 | ''' 13 | The function takes arguments from commandline 14 | Argument 1 - Python file name 15 | Argument 2 - Input String Showing the Sudoku 16 | ''' 17 | if len(sys.argv)==2: 18 | grid = sys.argv[1] 19 | assert len(grid) == 81 20 | start = time.time() 21 | sudoku = csp(grid=grid) 22 | solved = Backtracking_Search(sudoku) 23 | #solved = AC3(sudoku) 24 | 25 | f = open("output.txt", "w") 26 | 27 | if solved!="FAILURE": 28 | display(solved) #Displays the solved puzzle in the sudoku format 29 | print (write(solved)) 30 | f.write(write(solved)+"\n") 31 | print ("This puzzle was solved in: ", time.time()-start," seconds") 32 | print ("Perfectly solved") 33 | else: 34 | print ("Not solved") 35 | 36 | f.close() 37 | ''' 38 | if isComplete(sudoku) and solved: 39 | display(solved) #Displays the solved puzzle in the sudoku format 40 | print ("This puzzle was solved in: ", time.time()-start," seconds") 41 | print ("Perfectly solved") 42 | else: 43 | print ("Not solved") 44 | 45 | ''' 46 | else: 47 | print ("INVALID NUMBER OF INPUTS") 48 | -------------------------------------------------------------------------------- /AC3.py: -------------------------------------------------------------------------------- 1 | # IMPLEMENTATION OF AC3 ALGORITHM 2 | 3 | import queue 4 | from CSP import * 5 | 6 | #THE MAIN AC-3 ALGORITHM 7 | def AC3(csp): 8 | q = queue.Queue() 9 | 10 | for arc in csp.constraints: 11 | q.put(arc) 12 | 13 | i = 0 14 | while not q.empty(): 15 | (Xi, Xj) = q.get() 16 | 17 | i = i + 1 18 | 19 | if Revise(csp, Xi, Xj): 20 | if len(csp.values[Xi]) == 0: 21 | return False 22 | 23 | for Xk in (csp.peers[Xi] - set(Xj)): 24 | q.put((Xk, Xi)) 25 | 26 | #display(csp.values) 27 | return True 28 | 29 | 30 | 31 | #WORKING OF THE REVISE ALGORITHM 32 | def Revise(csp, Xi, Xj): 33 | revised = False 34 | values = set(csp.values[Xi]) 35 | 36 | for x in values: 37 | if not isconsistent(csp, x, Xi, Xj): 38 | csp.values[Xi] = csp.values[Xi].replace(x, '') 39 | revised = True 40 | 41 | return revised 42 | 43 | 44 | 45 | #CHECKS IF THE GIVEN ASSIGNMENT IS CONSISTENT 46 | def isconsistent(csp, x, Xi, Xj): 47 | for y in csp.values[Xj]: 48 | if Xj in csp.peers[Xi] and y!=x: 49 | return True 50 | 51 | return False 52 | 53 | 54 | #DISPLAYS THE SUDOKU IN THE GRID FORMAT 55 | def display(values): 56 | for r in rows: 57 | if r in 'DG': 58 | print ("------------------------------------------------------------------------------") 59 | for c in cols: 60 | if c in '47': 61 | print (' | ', values[r+c], ' ',end=' ') 62 | else: 63 | print (values[r+c], ' ',end=' ') 64 | print (end='\n') 65 | 66 | 67 | 68 | #CHECKS IF THE SUDOKU IS COMPLETE OR NOT 69 | def isComplete(csp): 70 | for variable in squares: 71 | if len(csp.values[variable])>1: 72 | return False 73 | return True 74 | 75 | 76 | #WRITES THE SOLVED SUDOKU IN THE FORM OF A STRING 77 | def write(values): 78 | output = "" 79 | for variable in squares: 80 | output = output + values[variable] 81 | return output -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Solving Sudoku using Backtracking and AC-3 Algorithm # 2 | 3 | ## Introduction ## 4 | 5 | In a standard Sudoku puzzle (9x9 grid), there are 81 variables/tiles in total. Each variable is named by its row and its column, and must be assigned a value from 1 to 9, subject to the constraint that no two cells in the same row, column, or box may contain the same value. The initial configuration of sudoku is a partially filled board. The objective is to solve the puzzle such that all the constraints are satisfied. As the given problem has a list of constraints to be satisfied, CSP solutions work efficiently for the sudoky problem as well 6 | 7 | 8 | ## Representation of the Grid ## 9 | 10 | The Sudoku Grid is represented as a dictionary in python. The keys of the dictionary will be the variable names, each of which corresponds directly to a location on the board. In other words, we use the variable names Al through A9 for the top row (left to right), down to I1 through I9 for the bottom row. For example, in the example board above, we would have sudoku["B1"] = 9, and sudoku["E9"] = 8. The number 0 is used to represent the tiles which are not filled. 11 | 12 | 13 | ## Code Description ## 14 | 15 | wrapper : Runs Backtracking on all the sudoku problems in the file sudoku_start.txt 16 | 17 | wrapperAC3 : Runs AC3 on all the sudoku problems in the file sudoku_start.txt 18 | 19 | driver_3 : Accepts a commandline sudoky grid in the form of string as an input and writes the solved puzzle to the file output.txt 20 | 21 | CSP : Defines the CSP class 22 | 23 | AC3 : Implementation of AC3 24 | 25 | Backtrack : Implementation of Backtracking + MRV + FC 26 | 27 | helper : Consists of a couple of helper functions used across the problems 28 | 29 | 30 | 31 | ## Environment ## 32 | 33 | Language : Python-3 34 | 35 | 36 | ## How to execute ? ## 37 | 38 | Run python driver_3.py 39 | 40 | Each Sudoku puzzle is represented as a single line of text, which starts from the top-left corner of the board, and enumerates 41 | the digits in each tile, row by row. 42 | 43 | In order to solve all the puzzles and write their output to a text file, the wrapperAC3 file has to be executed. This file is executed as follows: 44 | 45 | python wrapperAC3.py 46 | 47 | 48 | ## Result ## 49 | 50 | The result after executing the AC3 algorithm for the input_string: 003020600900305001001806400008102900700000008006708200002609500800203009005010300, we get 51 | 52 | ![image](https://user-images.githubusercontent.com/21295042/28235940-2c65acb0-68e7-11e7-9b94-1fdee19b73b5.png) 53 | 54 | 55 | 56 | ## Observations ## 57 | 58 | 400 puzzles from sudokus_start was tried. The total time taken for executing all the 400 puzzles in the file is 26.88 seconds 59 | The behaviour of AC3 was not expected as just 3 puzzles were solved from 400 ones. 60 | 61 | However, all the puzzles were solved using Backtracking. MRV was used to choose the next unassigned variable and forward checking was used to reduce the size of the domain. The running time per puzzle was around 15-20 seconds. 62 | 63 | 64 | -------------------------------------------------------------------------------- /Backtrack.py: -------------------------------------------------------------------------------- 1 | # IMPLEMENTATION OF BACKTRACKING SOLUTION FOR SUDOKU 2 | 3 | from CSP import * 4 | from copy import deepcopy 5 | 6 | #BACKTRACKING SEARCH INITIALIZES THE INITIAL ASSIGNMENT AND CALLS THE BACKTRACK FUNCTION 7 | def Backtracking_Search(csp): 8 | return Backtrack({}, csp) 9 | 10 | 11 | 12 | #THE RECURSIVE FUNCTION WHICH ASSIGNS VALUE USING BACKTRACKING 13 | def Backtrack(assignment, csp): 14 | if isComplete(assignment): 15 | return assignment 16 | 17 | var = Select_Unassigned_Variables(assignment, csp) 18 | domain = deepcopy(csp.values) 19 | 20 | for value in csp.values[var]: 21 | if isConsistent(var, value, assignment, csp): 22 | assignment[var] = value 23 | inferences = {} 24 | inferences = Inference(assignment, inferences, csp, var, value) 25 | if inferences!= "FAILURE": 26 | result = Backtrack(assignment, csp) 27 | if result!="FAILURE": 28 | return result 29 | 30 | del assignment[var] 31 | csp.values.update(domain) 32 | 33 | return "FAILURE" 34 | 35 | 36 | 37 | #FORWARD CHECKING USING THE CONCEPT OF INFERENCES 38 | def Inference(assignment, inferences, csp, var, value): 39 | inferences[var] = value 40 | 41 | for neighbor in csp.peers[var]: 42 | if neighbor not in assignment and value in csp.values[neighbor]: 43 | if len(csp.values[neighbor])==1: 44 | return "FAILURE" 45 | 46 | remaining = csp.values[neighbor] = csp.values[neighbor].replace(value, "") 47 | 48 | if len(remaining)==1: 49 | flag = Inference(assignment, inferences, csp, neighbor, remaining) 50 | if flag=="FAILURE": 51 | return "FAILURE" 52 | 53 | return inferences 54 | 55 | 56 | #CHECKS IF THE ASSIGNMENT IS COMPLETE 57 | def isComplete(assignment): 58 | return set(assignment.keys())==set(squares) 59 | 60 | 61 | 62 | #SELECTS THE NEXT VARIABLE TO BE ASSIGNED USING MRV 63 | def Select_Unassigned_Variables(assignment, csp): 64 | unassigned_variables = dict((squares, len(csp.values[squares])) for squares in csp.values if squares not in assignment.keys()) 65 | mrv = min(unassigned_variables, key=unassigned_variables.get) 66 | return mrv 67 | 68 | 69 | 70 | #RETURNS THE STRING OF VALUES OF THE GIVEN VARIABLE 71 | def Order_Domain_Values(var, assignment, csp): 72 | return csp.values[var] 73 | 74 | 75 | 76 | #CHECKS IF THE GIVEN NEW ASSIGNMENT IS CONSISTENT 77 | def isConsistent(var, value, assignment, csp): 78 | for neighbor in csp.peers[var]: 79 | if neighbor in assignment.keys() and assignment[neighbor]==value: 80 | return False 81 | return True 82 | 83 | 84 | 85 | #PERFORMS FORWARD-CHECKING 86 | def forward_check(csp, assignment, var, value): 87 | csp.values[var] = value 88 | for neighbor in csp.peers[var]: 89 | csp.values[neighbor] = csp.values[neighbor].replace(value, '') 90 | 91 | 92 | 93 | #DISPLAYS THE SOLVED SUDOKU IN THE GRID FORMAT 94 | def display(values): 95 | for r in rows: 96 | if r in 'DG': 97 | print ("-------------------------------------------") 98 | for c in cols: 99 | if c in '47': 100 | print (' | ', values[r+c], ' ',end=' ') 101 | else: 102 | print (values[r+c], ' ',end=' ') 103 | print (end='\n') 104 | 105 | 106 | #WRITES THE SOLVED SUDOKU IN THE FORM OF A STRING 107 | def write(values): 108 | output = "" 109 | for variable in squares: 110 | output = output + values[variable] 111 | return output 112 | -------------------------------------------------------------------------------- /data/sudokus_finish.txt: -------------------------------------------------------------------------------- 1 | 483921657967345821251876493548132976729564138136798245372689514814253769695417382 2 | 435269781682571493197834562826195347374682915951743628519326874248957136763418259 3 | 956138742237954816481672953594867321128593674763421598879246135312785469645319287 4 | 794582136268931745315476982689715324432869571157243869821657493943128657576394218 5 | 249186573735942186168375429512697348976834251483251967694723815327518694851469732 6 | 653287941794631258128945376819724563236859417547163829965372184372418695481596732 7 | 152479683368215974974638512416387259783952461529146837237864195891523746645791328 8 | 894317265731526894562984173358642719247139586619758432173465928925873641486291357 9 | 168295374529734618437186529312578496875649132694312785786951243951423867243867951 10 | 597468132318927564642153897456832971821796345973514628735641289164289753289375416 11 | 379521684284736519651498372732845961548619723196273845917364258425987136863152497 12 | 526394871817652349394817526148736952632985714759421683975143268281569437463278195 13 | 742698513816523947539714682381952764965847231427136859653479128174285396298361475 14 | 184726539376859142925413786652137498713984625849265317591372864468591273237648951 15 | 715986423689243715324175968963418572841752639257639184132564897596827341478391256 16 | 156938427427156938398472561534689712869217354712543896243891675675324189981765243 17 | 582946731934187625671235849168492357345768912729513486456871293293654178817329564 18 | 623815947479236185851794326934678251718952634265143798596387412142569873387421569 19 | 762149853385672914194583762527316498946827531831954276453768129219435687678291345 20 | 128397546397654812654218937786531294942786351513942678469875123875123469231469785 21 | 569143287287965431413872695635729148872514963941386752326457819154298376798631524 22 | 746912358921358746538467219689745123317286594452139687873591462265874931194623875 23 | 675913482482657931391248675817362549263594718954781326749125863528436197136879254 24 | 549283671678941352321567948185492736937816524264375189413729865856134297792658413 25 | 539472816276183954148569723492736581851924637367815249615398472724651398983247165 26 | 286145793579632184134789256425896371618327945793514628862951437347268519951473862 27 | 567128349934657182281493576346875291752916438819342765195764823423589617678231954 28 | 382746519467519832915283647254897361731625984896431725543962178629178453178354296 29 | 641352897325987641978461352259836714783149265164275983836714529497528136512693478 30 | 489356172536721849712984536197435628348162795625879314273548961954613287861297453 31 | 167523849984176523325489671798315264642798135531642798476831952213957486859264317 32 | 293518746851476293476923518512384967687159432349762185164235879728691354935847621 33 | 617329584398457621425618739286174953953286147174593862762831495549762318831945276 34 | 859632147236174859741895632125948376974326581368517924493781265687259413512463798 35 | 496175382785342196312986457547891623823654719961237548178423965659718234234569871 36 | 318624579624759183759183264286947351475231896931865742867412935592376418143598627 37 | 915823746728465319634719582159347268286591473347682195593178624472936851861254937 38 | 581497632796235148432168957875914326624783519319526874943852761167349285258671493 39 | 513628794682497351794531628836159247457362189129874536975286413348715962261943875 40 | 637518294518492736429367518954783162783621459162945873876134925295876341341259687 41 | 354218697218976354769453812496321578527869143831745926945632781173584269682197435 42 | 369415782175892364428367195234179856791586243586234917847621539953748621612953478 43 | 927145683146837952358962174581694327694723815273581469769358241812479536435216798 44 | 392815476165437892487269153214378569873956214956142738538794621749621385621583947 45 | 198576432756423981423891657671935248842617593935284716287359164514768329369142875 46 | 485126937162397845937584126216973458793845612548612379351768294674239581829451763 47 | 425681937793542186168973425972315648531864279846729351289137564317456892654298713 48 | 187624593652389174439157682814795326526831947793462851975216438268943715341578269 49 | 869172354721453689435896127172685493596347812348921576283714965617539248954268731 50 | 952346178463781952178529364846197235521463897739258641297615483615834729384972516 51 | 487536192612894357593172468348259671761348925925761843839427516256913784174685239 52 | 291643758643875291857291436536127849179458623428936517714569382382714965965382174 53 | 539481276148276359267593814623714985895632147471958632914325768352867491786149523 54 | 279156834148739526536284917685913742394872651721465398917328465853641279462597183 55 | 715496823483217956962835147634159278891372465527648391379584612146723589258961734 56 | 947635218683241597125897634712459386594386721836172945278964153351728469469513872 57 | 359872146278641539614359872732164985146985327985237614867493251423516798591728463 58 | 397815642562497183184623975249358761835176429716942538453269817921784356678531294 59 | 917283645354671829862495371429816537586734912173952468231549786745168293698327154 60 | 691538472835247619427196583589614237273859164146372895758921346912463758364785921 61 | 831265974476819532259374816384192657567438129192756348615927483928543761743681295 62 | 875963241961482357243571698426798513197635482538124976319257864752846139684319725 63 | 365729481241856379798143526579681234123475698486932157812594763954367812637218945 64 | 597312864418567392326498175973251648684973521152684937239145786761829453845736219 65 | 752836941683491527941752638829145376514673892376289154437968215298517463165324789 66 | 687253194421978653593164782816549327235781946749326815168435279374892561952617438 67 | 813952647647381529925764831279615384584239176136478295391846752752193468468527913 68 | 352918674489736125617425938824371596573869241961254783745682319138597462296143857 69 | 216738954974215638358964172821453769439176285567829341793542816685391427142687593 70 | 641587329389214567527963841856791234192345678734826915915672483273458196468139752 71 | 284735196379162458516489327158397642962854713437216985645978231793521864821643579 72 | 278435691519682347463971528347269815851347962692518734726153489984726153135894276 73 | 149627853365189247728543196481372569596418732237956418974261385853794621612835974 74 | 168279453259143876473685219946851732817432695325796148632917584794528361581364927 75 | 216849735753621894489753216832596471947138562561274983174965328695382147328417659 76 | 142896537378215649659374182826941375917583426534627891293158764461732958785469213 77 | 574962318962318457183754269896147523235896741741235896317429685628571934459683172 78 | 473261895298345617561987342952418736184673529736529184845196273619732458327854961 79 | 873215649249678531651394287514923876386547912927186453432861795168759324795432168 80 | 513429678678531924492678153859362417721954386364817592147296835936785241285143769 81 | 741835269269174358835629741574912683398467125126583497483756912912348576657291834 82 | 269854371518732496374196852921685734843279615756413289132568947685947123497321568 83 | 876345219925187634341926578453618927682739145197452863239871456718564392564293781 84 | 863917425129845367754632819487329651392561784615784932931276548276458193548193276 85 | 326978541145263879978415236783594612462381957519627483894132765251746398637859124 86 | 394675812275841936861239547137492658542768391689513274756984123423156789918327465 87 | 925783614784961253136245789893657142562194378417328596359876421678412935241539867 88 | 429871536361245879587369142973186425245793618618452397732518964156924783894637251 89 | 821975436597346218634128795452839167983761524716254983269487351375612849148593672 90 | 165842973284397651739561482673984125842175369591623847357416298428739516916258734 91 | 418963527362758491579412836783124659295637184641895273954386712127549368836271945 92 | 152789436976534812834216759589461327723958641461327985298645173317892564645173298 93 | 971364285528179346463285917349721658217658439856493172185942763694837521732516894 94 | 594712638673498521281653479417825963825936147936174852349261785162587394758349216 95 | 651834927479512368328769415135928674746153289892476531967385142214697853583241796 96 | 963714852247859631851326749526493187739185426184672593375968214698241375412537968 97 | 512347968743698521689251437137564289456982713298713645871425396364879152925136874 98 | 986325714714986253325471698632149587849752136157863942573298461298614375461537829 99 | 682371945497265183351984627516492378749538216823716594238157469964823751175649832 100 | 365712489412859637789643152691574823574238916823196745247361598936485271158927364 101 | 618435792932718654574962381467293815293581467851647239789126543345879126126354978 102 | 286753149735194682941628375198475263623981754574236891857319426419862537362547918 103 | 276814395189536274453729681562183947794652138318497562631278459845961723927345816 104 | 815649723469372158732851694693785412248196375157423986521964837974538261386217549 105 | 359647812768219543214853679873921465921564738645378921582736194496182357137495286 106 | 796528314842137695135694287954783162261459873387261549673842951428915736519376428 107 | 569287134371495628248631597826549371415763289793812456954128763637954812182376945 108 | 943827165561394872827615394286531947739482516154769238418956723695273481372148659 109 | 874932516639154278215768943943271685586493127721586439392647851158329764467815392 110 | 518972643364851972927643581789526134156437829243189765632715498495268317871394256 111 | 395827164681534792274916853427358916853169427916742538162485379549273681738691245 112 | 871594362493672815562183497384917526156248739729356184615439278247861953938725641 113 | 851437692734629581629851473468572139215983746973164825346795218597218364182346957 114 | 469753218735218694812694573591326487374589126628147935247861359186935742953472861 115 | 156932874948571362372846591721394658695218743834657219413725986569183427287469135 116 | 592476138813925674674831925761382459459617382328549761135264897246798513987153246 117 | 423758916179623458658491237541879362392516784867342195235167849984235671716984523 118 | 185923647739416528642578319916852734473691285528347196397185462264739851851264973 119 | 278653419153948672469721583395472168814369725726815934631584297587296341942137856 120 | 874631592631592847592874613253149786467283159189756324928365471345917268716428935 121 | 542938617176254839389761425261479358753816942498523176624387591915642783837195264 122 | 981725634327496581564381279436579812872614953159238467215963748693847125748152396 123 | 371695248659284317248137659983512476524876193167943582715328964492761835836459721 124 | 147598362295163478386427519569381247423679851871245693618952734734816925952734186 125 | 241935678786142539593678142935781264817426395462593781629817453154369827378254916 126 | 296341758143785692875692341462517839938264517517839264329476185781953426654128973 127 | 748315269965872134231946578523789416197564382684123957812457693459638721376291845 128 | 978362541145789632263415798514927863796834215832651479481296357357148926629573184 129 | 145239768896475132732618945328164579957823614461597283573981426219346857684752391 130 | 652431897973258416148697532539762148214983765786145923861379254425816379397524681 131 | 327658194568149327941273586692517843715834962483962715876495231159326478234781659 132 | 243715986851964732796238514912853467365497821478621359627389145189546273534172698 133 | 368915724519724368724836591872569143653148972941273685196452837485397216237681459 134 | 256984731987631245341257869523178496469523187178496352794815623815362974632749518 135 | 126954378458673921739218456672395814915487632843162795384721569561839247297546183 136 | 597823641286514739314697528172946853648352197953781264465138972731269485829475316 137 | 468215397321879654795643821954321768682457913137968542513794286279186435846532179 138 | 713946285954218637628753419365487192847129356291365874176894523489532761532671948 139 | 825619743916743852473528916759132468642875391138964527591287634367451289284396175 140 | 659318247872456931143279586798562314524831679316947852965184723437625198281793465 141 | 198325674623794158754681239319847526265139487847256913972413865431568792586972341 142 | 716439285394285176825167934269374851473851629158926743542698317687513492931742568 143 | 841953627359762841762814935634581792985427163127396584493675218278139456516248379 144 | 291745386386291475547386912473518269815962734962473158154827693728639541639154827 145 | 742539816519862473638417952475283691196754238823691547251346789987125364364978125 146 | 396425178247819356185673429634587291758192634912346587479231865521968743863754912 147 | 951267438374518629862349157598421376617935842243786915126854793785193264439672581 148 | 167293845893514762425687193736142958518369427249758631971425386354876219682931574 149 | 921356478385174926476982531214567893863419257597238614658793142132645789749821365 150 | 821369547547218639936475281762531894153894762498627315374156928619782453285943176 151 | 756843192943521768128679354875936421631284975294715683362157849517498236489362517 152 | 781493562954612783263758194438167925125389476697524318812945637579236841346871259 153 | 697148235143257968258369147376591482519482376824673519435726891962814753781935624 154 | 952431876378652149461789532719368254245917368836245791193876425524193687687524913 155 | 719482365635917284824635197196528743347169528582374916471893652268751439953246871 156 | 215736498936482175748591236891324657567918342423675981382147569154869723679253814 157 | 613725489275498361849163257932617548584932176761584932426379815158246793397851624 158 | 256174938714983562389526417561842379892357641437691285623715894975438126148269753 159 | 821957634647832159395146287572369841963481572418275963136524798254798316789613425 160 | 987524316452361798136897425365489172821673954794152683619235847273948561548716239 161 | 921648573846357192375291864593874621162539487784162359239485716418726935657913248 162 | 523681794819745236764329851982137465371456928456298317247513689138964572695872143 163 | 568193427174825396923476158712648935635719842489352671897264513246531789351987264 164 | 612798534879354162345612978584976213231485796967123845756849321498231657123567489 165 | 423571689689432157517869324261943875395287461748156932154628793976315248832794516 166 | 316278594874159326592463781158792643467381952239645178721534869683927415945816237 167 | 947328615325619487186547923514763298673982541298451376762895134431276859859134762 168 | 945317268173628594286459137527943681314286975698175342459861723732594816861732459 169 | 216873495378594621594126378132459786459687213687312954965741832741238569823965147 170 | 627591348198243576534867219856724931419385627273916854985472163341658792762139485 171 | 285417396967325814143986527621573948839264751574198263496732185318659472752841639 172 | 254678391913425867678913254341789625789256413562134978136897542425361789897542136 173 | 823514796415967823769832145246753981537189462981426357378295614154678239692341578 174 | 395762418418593762627841953281659374956437821734218695849175236172386549563924187 175 | 359168742724395861186274593432689157571432986968517234647951328215843679893726415 176 | 412897635365421879798536412629354187543178296187269543951683724274915368836742951 177 | 413529678987634152652781394739812465546973281128456739261398547395247816874165923 178 | 179463258648925173253187649482351796531679482967248315396514827815732964724896531 179 | 249176358675398421138425976917632584854719632362584197521843769796251843483967215 180 | 681254397942783615573961284416839752358627941729415863167348529295176438834592176 181 | 386457291574192368921386754163875429249613587758924613697541832832769145415238976 182 | 256734918487192653193865427372941865914658732865273149629517384748326591531489276 183 | 751392846436581729982746513817235694594618372263479185679823451145967238328154967 184 | 758429361412836957396715284183542796675198423249673815564987132937261548821354679 185 | 694183572813752496257946183176834925485629731329517648532491867961278354748365219 186 | 927568134854319267136427985582943671671285349349176852498731526265894713713652498 187 | 275984613948136275316257894127563948583492167469871352654329781892715436731648529 188 | 814923756796154823235867914459386271172549638683712495328475169547691382961238547 189 | 813659274274138596695247813156723489932481657487965132361594728728316945549872361 190 | 349827561615439827728516439153678294962154783487293615836741952571982346294365178 191 | 439268751862715943715349862381697425524183697976524318653472189197856234248931576 192 | 412537869963184527785296431156872394827943156394651782548729613679315248231468975 193 | 324867519587192463691543872162359748953478126748216395819725634436981257275634981 194 | 978165324526374981134289576843751269715692843692843157457938612361527498289416735 195 | 967583241435261987812749635796135824583624719124978356251397468349816572678452193 196 | 892571346457263981361948725523614879176892534984735612618457293735129468249386157 197 | 947351826286794351351826974895162743734589612612473589179235468468917235523648197 198 | 972635481536841927184927365498216573263574198751398246619483752827159634345762819 199 | 245967138396184527718352946457629813839741265162835479624578391571493682983216754 200 | 368592471475183692129467385742956813596831724813724569937615248651248937284379156 201 | 321856947749132685658479213875914362436725891912683574567391428193248756284567139 202 | 751264398389517246642983157196425783425738961873196524234679815518342679967851432 203 | 293518746476932518851674293512496837964387125387251469745163982628749351139825674 204 | 247385961863921547951764382372196854685432179194857623518249736439678215726513498 205 | 147829536362514897958367142283956714714238659695471328821643975436795281579182463 206 | 932864571158729463647135928273941856586372149491658237865293714329417685714586392 207 | 695438712271695438843127659486912375537846291129573864752389146364251987918764523 208 | 638925417529147683147863592215479368974386251386512749861234975453791826792658134 209 | 617593842942867513358124796429718365536942178871356924293481657765239481184675239 210 | 962843715438517926175296348381925467746138259259674183517362894894751632623489571 211 | 379468152281795346456132798928647531647351289135829467713984625594216873862573914 212 | 938726541672145893154938726387562419419387652265491378526879134841253967793614285 213 | 975361248462875319138429657627538491351942876849716523513287964286194735794653182 214 | 952731648741682359638945127186324795324579816579168432465893271217456983893217564 215 | 126754389398612547754398216679521438543867921281943675862135794415279863937486152 216 | 248561739593247861167893254916432578324758196785916423651324987832179645479685312 217 | 943857612862941753571236984486725139139684527257319846395162478724598361618473295 218 | 781649325235817469946352871193426587628175934574938216359781642467293158812564793 219 | 198756234276438951435129786962384517751962348843517629527641893684293175319875462 220 | 185439627693257148247816593469385712358721964721694835814563279536972481972148356 221 | 568439712917285463423617598134752986896341257275896134752168349649523871381974625 222 | 645213798813976452297845613738159264461782539529634871152497386974368125386521947 223 | 967415823214389567538267491496153782375928614821746935159872346643591278782634159 224 | 267915348195348267834627915572891634918436572643572891426153789789264153351789426 225 | 813645279465729183927831456581296347732458961694317528348162795156974832279583614 226 | 927643815436518792158927436579164283641382957382759164764831529893275641215496378 227 | 594231876321876954687495132478519263915362748263784591736158429152943687849627315 228 | 217836495683954217549712386458169732721543968936287154894375621162498573375621849 229 | 587246139634891275912735846859673412421958367376124958748362591195487623263519784 230 | 763924851185637429942158763237596184418372596596841372354289617821763945679415238 231 | 473856192569421783821739456298374615734615928615982347356198274187243569942567831 232 | 137526984694387215825149367316492578479815632258763491942671853783954126561238749 233 | 652947318497381625831652947289174563174536289365298174928465731713829456546713892 234 | 851632947623974185497158623186547239932861574574293816245786391768319452319425768 235 | 378251694912674538645983127834197265297568341561432789729345816186729453453816972 236 | 178296534962354178543817629429735816681429753735681942297163485854972361316548297 237 | 719562843265438179843917652198274536472653918356891724937146285624785391581329467 238 | 693274581428165397715938624549623718187549263362781459856497132234816975971352846 239 | 673942158912578346485163792298431567764895213351627489526319874139784625847256931 240 | 256491738471238569893765421534876192629143875718529643945387216162954387387612954 241 | 491736582376582941285491376517269438834157629962348715149875263623914857758623194 242 | 562719834897453612341862759259381476674295381183674295718946523936527148425138967 243 | 258413967143967852796258134815376429962541378437829516374695281689132745521784693 244 | 435179826917286354628354971241937568596418732873625149169743285382561497754892613 245 | 385692741947183265162754893279861354518347926436925187891576432623418579754239618 246 | 746395821521847936893261457234586179179432685658719342462978513315624798987153264 247 | 925741386467938125813625947194356872672894513538172469751463298289517634346289751 248 | 458763912627819345913425876842637159391582467765941283289156734574398621136274598 249 | 519847623237916485864352719651239847478165392923784156342578961196423578785691234 250 | 925614378734298615816735924479582136158963247263147859642359781597821463381476592 251 | 894251736251736948736489251419827563368915427572643819923568174685174392147392685 252 | 361582479258794613974631582513927846896345721742168935189453267627819354435276198 253 | 581643297392785416674219538138927654465831972927456381849372165716594823253168749 254 | 267519438915843726384627159152964873736281594498735261571398642823456917649172385 255 | 731826495945371826682459173874693251169582734253147968398715642517264389426938517 256 | 175489623623157849498362175254713986986245731317698452832976514761534298549821367 257 | 638251479147869532952347816215634987789125364463978125576483291394712658821596743 258 | 465187293793625148218934756937251684846793521521468937654372819189546372372819465 259 | 718243659542967138369815247951638472427159386836724591293471865174586923685392714 260 | 358942617729561384641837592865723941934158276172496853287619435593274168416385729 261 | 619723458352849167874651329261935784593487216487162935936514872725398641148276593 262 | 283617495496582317715934826349258761572146938861379254638795142957421683124863579 263 | 127435968354689271698712534912347685586291743743856129875963412239174856461528397 264 | 215698734437521896968374512186745329392186457754932681623817945549263178871459263 265 | 761984532328715496459263187875492613613578924942631758137849265594326871286157349 266 | 594782163827136945631954278352698714418527639976341582263819457745263891189475326 267 | 231849675957326148648751239786914523194532786523687914475268391319475862862193457 268 | 693458217174923685582167394469271538217835946358649172726394851941582763835716429 269 | 928471563147356982635289714791562348483197625256834197879645231514923876362718459 270 | 932867145768514239514932876643728951287195364195643728351479682479286513826351497 271 | 587319462162458937934672851619825743453796128728143596896531274345287619271964385 272 | 576321984413859627289476351394265718827194536165783492632948175948517263751632849 273 | 674258931852913746391647285429186357537492168168375429983521674215764893746839512 274 | 246785913319264587587391246493812765765943821821576394172439658658127439934658172 275 | 435921687978653124612748539249386715157294368863175492591867243786432951324519876 276 | 832615974947283651561794283418937562753826149629451837275369418396148725184572396 277 | 982136754364597182571842396856724913193658247427319568749285631235461879618973425 278 | 431269578925781643867453129248536791653197284719842365186925437374618952592374816 279 | 254176983197283654683594712712639845546812397839457261925361478361748529478925136 280 | 436781592278539164915246387561374928892165743743892651354918276627453819189627435 281 | 913472568658931742472586139295163874361748295847295316784329651536814927129657483 282 | 687195234143682579952734816798356142435271698216948357364529781529817463871463925 283 | 213498657874561329596237148462185793759643812138972465627819534981354276345726981 284 | 453291768962387145187654239379512486546978312821436597615749823794823651238165974 285 | 862359714593174826471862359327685491914237568658491237286713945745926183139548672 286 | 427651983358947621961382574746135298289764135135298746593426817674819352812573469 287 | 763249185425138769891657342149823657576914238382576914218395476957461823634782591 288 | 813269574495378612672451938586124793937685241241793865129836457754912386368547129 289 | 948173526612845973735269481561497832824631759397528614456712398189354267273986145 290 | 746953812539812647821467935154738269268591374397624158482376591973185426615249783 291 | 691283745547169832283547961814735296375926184962418573728354619139672458456891327 292 | 751649238283175964649823571428396715396517482517482693162934857875261349934758126 293 | 635429781489317256712586943897241365326875419154963872948652137573198624261734598 294 | 734128695596347128821659374165293847983714562472865913259436781318972456647581239 295 | 186794532352681974974235618423519786519876243768423159895142367241367895637958421 296 | 357248619619537824284619375491862753862753941573194286138925467925476138746381592 297 | 597268413682314957413579862835196274961742538724853691349627185258931746176485329 298 | 694378125372519846581624937138795462927146358465283719259437681713862594846951273 299 | 958643172723185964416972583549831627831726459267594318375418296692357841184269735 300 | 354172869129468753768935421297543186685217394413689572842356917971824635536791248 301 | 215739864973468125684215739458697213796321548132854697549182376327546981861973452 302 | 283169754475832916961754238528397641614285379739641582156423897342978165897516423 303 | 348719652719265483562348197497683521683152974251497836926874315135926748874531269 304 | 845762193291534876673918524916275438384196257527843961769421385452387619138659742 305 | 593142768427968135618537249235671984176489352984253671752394816349816527861725493 306 | 458976123971243856362815974723168549594732618186459237235687491817594362649321785 307 | 927186543546932178381574962269458317713629854458317629834761295192845736675293481 308 | 864375192357129648291486573129638457483517269576294831638751924715942386942863715 309 | 127683459638594217549172863263417985481359672795268341916835724354726198872941536 310 | 973524816258619347614873925431296758829457631765381492597148263382965174146732589 311 | 169582374287349561435671892392165487518734629746928153821457936654293718973816245 312 | 275438196436195728198762453319247685567981234824356971981623547743519862652874319 313 | 532167894918245637764983152421358976853796241679421583145872369396514728287639415 314 | 368124759975386214214759836536497128149238675827561493753842961492615387681973542 315 | 291685347685473921437219865128734659543926178769158234314592786952867413876341592 316 | 795831246624957138183462579317285694542796381968143752851324967476519823239678415 317 | 234986517715234689698157432586342971341798256972615348163579824827463195459821763 318 | 786249351135687249924135786359861427261574938847392615678453192492718563513926874 319 | 368524791927613548415798236839147652652839417174265983791486325583972164246351879 320 | 865913427319472586274586913458267139193854762726139845642798351537641298981325674 321 | 516829734289374615374165892637498251152736948498251376865917423921643587743582169 322 | 967483125583127649421659738138296574745318962692745381354972816279861453816534297 323 | 159246387264837951783951264376584129428169735915723846841375692537692418692418573 324 | 635487921291563784847219365764128593182395647953674812318952476476831259529746138 325 | 793546128182379456465128973621485739879213645354967281517632894236894517948751362 326 | 349286157712954368856173924287349615493561872561728493174892536928635741635417289 327 | 597213846284596317316847529923651784748932165651784293465178932172369458839425671 328 | 482695317317842596956713284134986752879254163265137948728569431541378629693421875 329 | 351278649964531728287496513842769351796153482513842976179384265625917834438625197 330 | 657928431892134756431675298275346189918257364364819527583761942149582673726493815 331 | 741362958589741632362958741936827514154639287827514369273486195495173826618295473 332 | 358471629427963158691285347569738214142596783873124596915647832734852961286319475 333 | 941526378375841926268793451432965817689217534517438692726389145194652783853174269 334 | 714256983839714265625398471381425796257169348946837152462981537198573624573642819 335 | 615372849734891526982465731468237195159684273273159468897526314346718952521943687 336 | 389745162745612893261839754517428639493567218826391547654283971138976425972154386 337 | 918245367523876491674193852136582974789614523245739618351928746892467135467351289 338 | 752364819894715623136289475921643587643857192587921364368592741479138256215476938 339 | 658413297914762853372985614187234569569871432423596178746358921831629745295147386 340 | 418596732569237184732481659627349518145728396893615247284173965376954821951862473 341 | 573841962814269573926357814459726138367185429182934756231478695698512347745693281 342 | 251867943674932851839415726568724139913658472742391568325179684497286315186543297 343 | 428376519196452378537918624342769851851234796769185432973641285615827943284593167 344 | 851239746293647518764815293918753624426198357375462189187324965649571832532986471 345 | 514879632263451897789362514976528341431697258852134769145786923628943175397215486 346 | 879613425524798163163425798791536842458172639236849571682357914915264387347981256 347 | 184967523769523418352184697876459231493218765521736984935671842248395176617842359 348 | 465879231327154698189362547543618972672495183891723456916537824758241369234986715 349 | 416897523729351684385264917942683751571942368638715249163578492857429136294136875 350 | 415273698879641253236859174627538941384916725591427386762184539158392467943765812 351 | 581642739674931825932758416849215673215367984367489251196823547723594168458176392 352 | 689175432523469871147238965458917326791623584236854719865341297972586143314792658 353 | 156798324438625917279314685392456871541987263867132549723561498984273156615849732 354 | 319872564287564193645193278598721346462385719173946852856219437921437685734658921 355 | 918673542257894163436152789794385216583261497621947358365719824179428635842536971 356 | 286513479514697238397248165825769341479321856631485927963152784748936512152874693 357 | 854126937732495186916783452148357629295861743673249518329614875581972364467538291 358 | 138462597527983641946751832874319265692845173315627489269574318781236954453198726 359 | 319562784652478319487931526823745691961283457745196832178659243234817965596324178 360 | 659843271483127596127569834748391652316254987295678143571932468864715329932486715 361 | 519683274734129865682457319928514637157236948463798152275961483341872596896345721 362 | 489263715715489326362571489596712843273894561841356297154627938627938154938145672 363 | 716248935248359617953671824392584761571936248864712359139427586427865193685193472 364 | 781293456932654718465817392326978541548136927179425863814769235657342189293581674 365 | 381694752257831964649572813724916538835427196196385247963258471512743689478169325 366 | 783549126126738954594621378618972543245386719379154682952867431431295867867413295 367 | 514287693693154872728396514156739248247618359839425761362541987485972136971863425 368 | 657483291283159746194672385729514863465328917831796452518937624976245138342861579 369 | 132874695965132487784956132613289754249517863857643921576428319328791546491365278 370 | 492875316875163924136294758984527631527316489613948275268431597341759862759682143 371 | 546297318183456729972318645394761582617825934825934167438179256761582493259643871 372 | 436972581815364279729815346942756138381249765657138924164523897593487612278691453 373 | 713928654564371829289465173675142398938657241421893765197586432856234917342719586 374 | 763924851925187634148563279284316597316759482579248163457632918831495726692871345 375 | 297341658684275139531689724319468572725913846468752391956827413143596287872134965 376 | 129478356654392718387156492872615934913847625465239187236984571741523869598761243 377 | 249683175368571249157942863892417356635829417714365982971254638483796521526138794 378 | 179258436852634971364179852296817543548963217731425689427386195915742368683591724 379 | 746892315852314697139675428583961742274583961961427583328746159497158236615239874 380 | 731489562852167943946253187193825674674391258528674319287916435315742896469538721 381 | 164278953972534861358196472427961538836752194591483726289615347615347289743829615 382 | 627584391854391267391726548419673825736258914582419736165937482243865179978142653 383 | 673192485251483976894576213945327861782651394316948752429865137168734529537219648 384 | 158967423342815769679432581963741852815326947724598136286174395431659278597283614 385 | 354216897987534612621978345718345926263891754549627138832759461196482573475163289 386 | 791364825436825917582917364367248591259671438814539672943152786625783149178496253 387 | 913246785248537196567198342795324618186975423324681579831452967452769831679813254 388 | 456973821218456973379218465587692134692341587134785692765834219921567348843129756 389 | 724639185963851427158472936386145792219763548475298613897316254631524879542987361 390 | 589164372362597184174283596897431265643852917251976438725318649938645721416729853 391 | 138762594524391867697854213812637459946518732753249186361425978275983641489176325 392 | 841769325763245891925138746214873659586491273379652184438517962692384517157926438 393 | 425618937673249815891537642184376529236495781759182364947823156362751498518964273 394 | 347685192265791834198324576816253749953467218724819365672148953581936427439572681 395 | 329745618857162439416938275742619853538274961691853742273596184965481327184327596 396 | 318427569467591238952836714876354192241968357593712486184675923735289641629143875 397 | 163487592547692183982315764871243659634958271295176438359724816418569327726831945 398 | 831549762276318495459267318918753624764182539325496187593871246187624953642935871 399 | 527913684341685279698724531853279146164538792972146358786451923415392867239867415 400 | 258367941367914852914825367432679185796581234185243796623158479579432618841796523 401 | -------------------------------------------------------------------------------- /data/sudokus_start.txt: -------------------------------------------------------------------------------- 1 | 003020600900305001001806400008102900700000008006708200002609500800203009005010300 2 | 000260701680070090190004500820100040004602900050003028009300074040050036703018000 3 | 000100702030950000001002003590000301020000070703000098800200100000085060605009000 4 | 094000130000000000000076002080010000032000000000200060000050400000008007006304008 5 | 000000000000942080160000029000000008906000001400250000004000000020008090050000700 6 | 000007000090001000000045006000020000036000410500000809000000004000018000081500032 7 | 052470000060000000000008010400000009700950000020040030000800090000003706000091000 8 | 090000000001006000060080070300000010000039000000050002170400028000003000086000057 9 | 000005000020004010030080020000008400800600000090010705006000000950003060003000001 10 | 500068000000000060042050000000800900001000040903000620700001009004200003080000000 11 | 070021004000030000601000002000000060008600703190000040010000208420900000000000000 12 | 000000001007050309004800020000000000030005700009420000000003000001000407060278000 13 | 000008003016020907030004600000000000905000200020130009003000020070005000000000400 14 | 004020030000809000000000700050037008000000005049060010500000000068000000007040901 15 | 000006003009040005320000008000010000001750609200000080000060000000800040470000200 16 | 000008020000006930098070001000000000009210000700000096240090000000300180000000003 17 | 002046000004080005070030009000002000305700000700000400006000093000054078000000000 18 | 003000040400200000000090026000070000010902000260000008500007000000060803300000069 19 | 000000003005002014000080060000000000946000000030004206000700000000030680070291000 20 | 020000000000004800054018030700001004000086050000000600000000100000020009230400005 21 | 009043000000000030410070000000000000800500060040006002000000010004098006700600520 22 | 040012050000300006008007009000000103317000000400009080070000000000800000090620805 23 | 005000080000000931090040000007000000000504008950000020040025000020006100030809004 24 | 000000000008901300021067000000000000007010024200300009010009000050000207700608003 25 | 000000010006003904040000720000030500850000600300010000000000002720600090080047100 26 | 000000003070002000130009006000000070610320005093004008060050000000008509000470000 27 | 007020000904650000000403000300000091700906030000000005005000800020080007008001050 28 | 080706000467009000000000040004097000701000084090000020000002000029070000000350006 29 | 000002000020080040000001050000006010703040060100070903800700009400000006500090400 30 | 000000070036000809000900506000400600048000700020070010003540900004013000000007400 31 | 107000809000070003000400001090005204600790000000042000070001000010950006050000300 32 | 000010000800400000070003510000000900607100430000700085060235070000000050930000600 33 | 000320500090050021000008000086004000000006140100090062000000090500060008001040006 34 | 059030100000000800000800032020000000900000580360007004090780005000050010002003700 35 | 090000000780302000002006400000090000800004709001230000000000900600700204034500001 36 | 000000009024059003750000060000000000070030890000065742800002000000006010043008000 37 | 000003040708000009034010500059000208000001000307600000090000000000030850860000037 38 | 000007002006000000000168057000000300600780000019006074040002001060040200008000090 39 | 000600790002000300000000608806009040057000180000004000900006003040010000201043000 40 | 007000000000000036420000008004003002700001409002900870000000900290870000001250000 41 | 050010000008000304000050800090000000007009003001700900900002001000504260600097400 42 | 300010000075000004008060105200009000091000203006200010040000000050008600600050070 43 | 027000080006000050008902004500600000090003810000580400060000000000409030030200700 44 | 000000400100007092087060050000000000000056004050042038000004001049000000001500907 45 | 090070000700020080000801000600005040000000003030004016080059000014008009060100070 46 | 480020900002090045000500100010003400093800600000600070050060200000000081009000000 47 | 020000000700502000008070405902010008030060079040000300000100000010006002000098700 48 | 000004503002300070030150000010700006000000900000062800905200000060040710300500000 49 | 060000004001403680000090000002600003000007810340900070003700000007000040054000001 50 | 000000008003001050078009300006000000500003007000208641207015000010000700000900006 51 | 000000000002004050090170408000000070001000925905001000030020000000000704104680009 52 | 090000008000805000007090030030020000000400000020036010014009300300010900005380004 53 | 000080000140000000067090010000004085000032100070000632900320008050060000000000023 54 | 000050004000009000000080917005000700000872000021400008000008005003001270400590000 55 | 010400003003200950000805000000100078000000405007000390309004000006003080250000000 56 | 047000008000201590100000000000000006004006700800070005200900100001708060000013070 57 | 059002006070000509010000000000160000100000307900037004007000000023006098500000400 58 | 000005602000407080004000000049008000030100400006002000050200007900700306000501090 59 | 000080045050000800060490070400000007500730900003900000001000080700100203008020000 60 | 000530000005000600000190503000004000000000164100370800008000040010000008004700921 61 | 031260004400019000000004006000000050060008020000056300010900000028000001003000290 62 | 800000000000000350203070000400090003107605080030020076000000064050800000004309000 63 | 005009400001806070000003500000001004000400698086030000800000060050000002037000005 64 | 500000060408507000026000000003050008600000520100000907200040006700009000005730000 65 | 050000900600091000001750000020040300010000090306000004030068200000000400165300000 66 | 607000100400900603090000000000500020030000040049300000100405009300002060000010038 67 | 013000040600300000005000801009605000080230076030008005000806000050000400000020003 68 | 002008000400706100000020908000000000003860000000054083700000009100090460200003050 69 | 000000000070205608008900072020000060009006285007000000000042000005300007040007500 70 | 040000000300000067500900001006790030102300000000020905015000083200400000400030000 71 | 280000100300162000000400000050007000000000003000000980600078031703000004820603000 72 | 200405601000002000003070508007209010850000900090000004020100000000000003100800006 73 | 140007000000000200700000090000300000090400002030950010000061300053000001002030974 74 | 008009003200100006070080200046000000000032000300006040032007500000000061501000020 75 | 000800000000620004409003010000000070040130000061000900000060008095000047308000059 76 | 040000000300205000009304002026000070000580000530000000000108760000730908005060000 77 | 000060010002000450003000009090100000200806000001205090300000600620070004400000170 78 | 003000090090305010000900002002008006104600500000000084000090070610000050020000061 79 | 003005049009000031650000000010900070006040000007086053000060090000000000090030108 80 | 000400070000500020090008000009302010720054006004000090000200030036080001000000709 81 | 041805009009070058030000000000002600300060025000500097000006902010040000007000000 82 | 000050300018000400000106852000005000800070010706003009002008000000940000000020508 83 | 000000000000187600000920570000600000002009005090000863200000000000004090060093781 84 | 000010020009000067054032000400000000302501780000780030000200000000058000508000006 85 | 000000000005063009008400000000000600002001007500600483090030000000700090630059024 86 | 000600000075040030800009040030002058002000091009000000000000000023106080008307400 87 | 900003610000000000036005000803050100060004070400020000000070000000012905041000860 88 | 009000000301000800587000002000100400040703600000052007700010060050000000000030251 89 | 000005000090040218004020090000000007900061004006000000200080300070600809100590000 90 | 000002900004000051000001002073904000800070000001003807050000090420030000006058000 91 | 400903007300708091000000006080024000000600000640005003050080010107000000000000045 92 | 002009000006500010030216009080000000023908600401000000000040070300000000005003208 93 | 000000005000079306400000907000000000210608000850400102000000000090037000700510804 94 | 090000008003400520081050000010005000020900047000070002000060705000580300700009000 95 | 000004000079000060020060415005020000706053009002070001067080002000000850000000000 96 | 063000050000800001050006009006090107009100400000072000075000004000240005000000960 97 | 000000000000098020000051030000004009050900000208700005001400300064070052005000804 98 | 906320010000006250005070000030000007009050100007863000503000060000010000000507000 99 | 000000000400000003051004620000000000040500016023716094000000000060023001005009800 100 | 300000400010809000780000000000074000000030016023090700007300008000000001058020064 101 | 000005002030700004500962081000000805093080000001000030000000043000000100000354900 102 | 080003040035094000900608005100000200020080054070006000000000000000000030302500908 103 | 000010300000006074053000080560000000704000138010000000600070050040060020020045000 104 | 000609700009072050000800090600780400000000070100023000020000000000500061306007500 105 | 050007010000209000014800070003000000020500008040378000500000090000082007100400006 106 | 000000000000037095000690207000000000200059070300260540000042000008000030009070420 107 | 009000000000005628000001500820040000000003000000010456050120060007004002080070900 108 | 003020100060000002020610000000031040000000006050000030008900000605200001370008650 109 | 070900500000000208000768003000000000500090120021080000300000000050029000400815090 110 | 510000043300050000000000080700000000000400029203180065000000000490200300071090006 111 | 000000000080030090070000853400000006050100400000740030100480009509003001000601000 112 | 000000000400670005002003000000010020006008009700300100010009008247000003038700040 113 | 801000002000000500020001470060570100210903000000000005300090008000200360002040000 114 | 000700000705200090012004000000300087000500100020140005040060309100005000900000001 115 | 056000004040001060000800000700090058000008003000050209000000000569000027087400005 116 | 000070030800005070000830920700000400400600000020009700130060000040000500087003200 117 | 420000016100003000008400007000000000090510000060000100005060809000000670710004503 118 | 180000040030406000002070000000050000073000205028300006000000400000009050000204973 119 | 000000400053000000000701080000072060000360005020000934000004007580200001902007000 120 | 070000000600502000000874010050100000007203050009000024020060070300010008010000030 121 | 540908600070000000000060400061000058000000002408023000000080000005602000800105060 122 | 901005030000406081060000009430000800002014000000200000015000740003800000000000390 123 | 000000000009000307048130600080000406024070000107003080010008000000000005036409000 124 | 040008000205000070080020000009300007003600051001040603000900000000000920002730006 125 | 000000008706002000003000142900080064000026090400590000600007050050000820000004000 126 | 000000058000700000800092300000000000030260007010839200009070005001053020004000900 127 | 000000000000070004000946578000000406007500000684100000002050600009008001076000040 128 | 070000540140000000000015008004007003000004015002601000000090300007000020609570000 129 | 040000008806005000700000005000100500900000610460007203500980000200006000004000091 130 | 600000007970250010048090002000760000210000000080045000000079000420000300000500080 131 | 020008004060009020001073000092010800700800000080060010800005200000000400034001000 132 | 000710080050000030790008010000050000360007800400020050000000005100540003004102000 133 | 000010004000024368700000001000500000003008970000073085096000000000090016230000000 134 | 056000001980000000300007060000000000460023000000090350090800000015302070030740000 135 | 100000000400073001000000456000090000000487600040002005300000500061009040090500080 136 | 000000001286004000300090520000000800048300007900080260060100070000000405009400000 137 | 000000000021079004000003821000000000600450003030008500000000006000100430046002079 138 | 000006080950000600020750400000080000000020356090305000100004000080030000032600008 139 | 000000000000000850073500000000002060002070091008904507000000004067050200200096070 140 | 009000000002056930003009506000000004000800670300000850060100000400020008080703000 141 | 098000070000000100054600009009847000060000000040006013000000005000500702080070340 142 | 000009005304000000000100930260000000000000009108006740500008300007010092000040560 143 | 000003000000700040700010030000081790900420100007006000003000210008000400510008009 144 | 000040080006200000540000002000008060015060004002070050004007003020000001030150007 145 | 002030000010000000608017902070000000006704200023000040000000700907000064000908100 146 | 000000000007800356080603029000000000050002000000300587009000060001000703060054002 147 | 000000038004000000062340000090000006007005040203006005006804700085003200000070000 148 | 060003000000510000400080003030000950008060007000750001001000300050800010002000574 149 | 000050000005004020070000031010000000000409200000230604000000000130045089049001005 150 | 800000000047000009900000001000001800050094700000607310004106000000700403005003006 151 | 000000000003500008128009300000000000601000900094005683000000009007098200400360000 152 | 000000000900012080060008004000000000100009076600500308000040007570200000306070059 153 | 000100000000050960000300147006500002519000000000070010030026000900814050080000000 154 | 000000806070000000000000532009008000005900300030040090000806025020193080600500000 155 | 000002000030010204804605090006000000007100508000304900001000000000050000050040871 156 | 010000000030000070000090206000020007067010042000605900080000060104800000600203004 157 | 000000080070000060040063057900000040000000100001580000400370005150006000090801600 158 | 000000900010003502009020017061000000000350040007600005600705000000038120000009000 159 | 800000030007002050005040280002000000960001000400070003006500000004090000009603025 160 | 087020016050000700000090000065000000000600904090002083000000047003008001500010030 161 | 001000000000300190005290064000004000000530480700000009030400006008006005007010008 162 | 503080090800740006000320001980100000070450028000000300047000000000060000600800000 163 | 568000000070800090020070100000000000600010802480302000007004003000000709301900000 164 | 010000004000000060305010070080900003000085006900100005056000020400001000003007480 165 | 400001009080002007007800000000000000390007401008100032050008000006000000002794010 166 | 000008090004100300502060000000000000000381050000005078700000000680907400905016000 167 | 007000000300010400086500023000003008070080040000001076000095000001006050000030760 168 | 040010068000000594080059000007003080304006000000100000050800703000000000800032009 169 | 000003400070090000500120078000000006059000010000302950060000000041200060003905000 170 | 000090008100000070000067200006700001400300020270006000005002103040008000060030005 171 | 080000000007300814103006020000000008030000051004000203090730000000000002700801600 172 | 000600000010000807608010000000700620000050400000034978100090002005300000007500030 173 | 023004000000000000009830040000700081500080400080006000000200010150000009092300508 174 | 000002000010000700627040000000009000000000801700018695000100006002000049503024000 175 | 000000000704005060086200003000000007000030906060010030000001000000840009893006015 176 | 000000000065400000700506010009000100540070090087000503000000020200010300806700900 177 | 000009000000000100602080390700010000046070001100056030000000500390200800074100000 178 | 070060200040005003050180040000050706001079002000000010300010807800030000000006000 179 | 000100000070008020130005900017000004000700600362000007020040000090001800000960005 180 | 000000000002003605073060200010030050000607940000400800100008500000000000804092070 181 | 080057000000000060020300704160000000000000080700904610690500000030000040005038006 182 | 000000000000002650100865027000000000900658000860003009000007000048300001500009200 183 | 000000000400501009980706010000000000094008000003000185000003000000900200308154900 184 | 008009301000800007090015000000040006605000020240070010000007000000260008801000600 185 | 600100000013702000200040080076030005000009000300010008002400000901070300040000009 186 | 900008004000010260036000000500940600070200000000000052098001006000804710000050000 187 | 000000010008000005000000894020060000500490007000071300050009000892005000730040020 188 | 000000006096004820030000000000086000172009000003700000000470000500090002061200507 189 | 003600000200000000090000000050003009900400057480065030001000020700300005540002001 190 | 009007060000009800020000400003000000960104000080200005000040902001900046200300070 191 | 000000000802000003015309000300000000020080607976500000603000100000800204040000506 192 | 000000060000084500005000400100070000027000006094000002540009010079005200030400070 193 | 320060010000100000001000872102009008900070000700000300000000004006001000075004980 194 | 000000024520000900004000570040700060010090040000003007000900000360020008080010705 195 | 007000000405060000010009035700000000000620019104900300000007400000010002008452000 196 | 800500000450003001000040000003610079000002500080700610610400090030020000009006000 197 | 007000000080700051000820004000000000730500600012400089100035008008900000003040100 198 | 000000000000801000180927060000000073263000100050090000000000002807050630340700009 199 | 200900100006004500700052046000600003830001065000000070004078000501400000080000000 200 | 308000000000000092100067300040900000090031724003720060000010048600000030000000006 201 | 000050007049030080050400200800000000036700001002600070060001028100200056000000009 202 | 001200008080510040000003050000000003405700001003000520000070000010002070907800430 203 | 000008006400902000001074000002000030004007025007050409000100000600009051030005004 204 | 000300000800020540951700080002006050000002009100007020010000006030008000006000498 205 | 007020000300514007050000002000000000700038059695001000021000000400005080070000403 206 | 030000000000009460007135000000001006086370040000008000005000700029010005004500390 207 | 000000010000690038000000609080010300007006090009003864000300000000001087900064500 208 | 008025010020000003047003500015009000900300000380010040000004000050790800002600000 209 | 010000000900000503050120790400008060006900108070300020000480007005030400000005000 210 | 002000010408010006070000040000900407746000000009000080500302000804000000600409570 211 | 000408102080090000450032000000007000007001280030009400700000600590000870000000904 212 | 000020000002005093154038000080000000409000602005000000500000130040003060700004205 213 | 000000000000070309038009650020500090050002006800710020010000000000100730704650000 214 | 000030008001600050608905100100000000320070006070068000000000200000406900000017560 215 | 020054300098000007004090006609020008003800000200903005000035000000270000000400002 216 | 000000000000207001067003204000000008004750090085010400001004900830000000000085310 217 | 000000600800901003001230000000000000039000500057019046000062000020508360008000005 218 | 001000025000000000940300870003026500020005004000030010309700600400090000000060093 219 | 000000030076400000030029700000000000001960040803017000507001003684000005000800002 220 | 000430600090000000007010093000300000050021900021600005800000209006000080002040056 221 | 000039002017080000000607500004000000800000050005890100002000049040023800301004000 222 | 040000008000006000207840603708100260000700030009030000050000000000300125300021000 223 | 007000000000080560508067000000003080070920000020746005009000046040001000002600100 224 | 060000008000040000830007900002001000900030070600502001006003000080200103050009406 225 | 000005000000720103000801000001006000730050960000010520008002000050004030070580004 226 | 020000010030000702100907000000004200040300050380709060060001020800000001005006008 227 | 004001000020076004007090002000000200010360000000004501030100000102903007000007305 228 | 207800400600000007040000080050009032000000900030280000004005600000400570300601009 229 | 500040000000800200002005840009600400000050000000124950008060000100407020063009000 230 | 000000001005600420000150063030000000400072000096800000004200007001060005679400000 231 | 003006002500021700801030000000000000000005920605080340000090000007003500040507001 232 | 100000980600080010025000060006402000009000630008760090000000003000054100000208009 233 | 000000000407380000000052040000074500000530280060090070008400701703000006006000090 234 | 001000000003970085090008023000007000932000070004090810005080000760000400000400060 235 | 078000090010070500005903100000100000290000301000402009709000006000020050050006002 236 | 000000000960004108543000000000000006080009053705080900007003480054002000000048000 237 | 009000040200030170800000002000000006002053008306091700000140000600085300001000007 238 | 000000001020160307000038600009003000100049200062700400000000100004800005070000046 239 | 003000000900000300485003700200001000064800000300027080000010070000704600800006930 240 | 250001000000008060003000401004806090009040800010029040905307000060050007000000000 241 | 090000080300500001280400000510060000004000009902300700100870200000904850000003000 242 | 002019030800000010001800009000001076004000081000670200000000500900020048400008900 243 | 058403000040000050000008000000006009900540300407020500070600001000002040501080090 244 | 000009000007086000600300000040007008000000032003605100060700080302000490054800003 245 | 000000000007080005000000893000001050000300906406005087000070000020008500704039608 246 | 740005000501040906090000000000000100000402680008700042002000003000620700980003000 247 | 900001080060038100010600000090006802002000003030070060750000000009017034000080000 248 | 008000012000019005900400806042037000091500007000000000080000700000398020106000000 249 | 000040003000900080004300019600009007008100000003700150040000000106003500705000230 250 | 005000000034000010816035000070080000000903240200000050000000081000001003300006592 251 | 000000000001006008730000001000020003300905027072040800020000000080100390047092000 252 | 000000009000704600904001502003000800806000020000160900000050000000809000030076198 253 | 001000207300705410000000030000007000000000902020406381009000000010004803000108040 254 | 260010008010003020004020050000904070030000000098000201000000000000406017040100305 255 | 001020005945001000000009000074000201000500000200040060090000640007060300020930010 256 | 000009000000000840408002105004010080086000700000600000030076010760530090000820000 257 | 000000000000009032052047006000000000009020060060078025000003000094000008021590043 258 | 000000200003005140000900006000201004000093020500408000654002009009000370300800000 259 | 018040000502007008000000240000000000000109380036000500000401000074506000000092710 260 | 008042600000060000040807500060000001000050270070000800087609005093200000400000009 261 | 610000000000809000000050000000900700003000016400100035030010002025008001040270503 262 | 000600000400080007700000026000000000070046030801070054008005100050000083100003570 263 | 000000000354600000690000504000040000006001703040850109000000000009070006401020390 264 | 010008004400000806000304000106700309302000050000002000000017000509203100000400060 265 | 001000002300005400050200080000490010000500004000001708000800265594006071000000000 266 | 000082060827000000001004000300090710010500630900000080203000450000203000080070000 267 | 200000600057000008040000239000910000000500006003007010470068090009000800060100007 268 | 003058000170000000002007090009000000000035940300009102020000050940000063800016000 269 | 028401000040006980005089000001002300080000600000030090000000001000003070060708409 270 | 030807000068010009510002800000000050200000060095003000001079002000006003020001400 271 | 000000000100408007000670000009000703050090008000043000096031004045080009070000380 272 | 000000000013009020280076001000000000007090530060783002000000100000000003751600809 273 | 000050000050000746000600085020106050007400108008000020900000004010700800700830000 274 | 000700000000060500087301040093010700060000021800500304070400608000000000900050070 275 | 005901080070600004600000030240000010050004000063000002000807043000000900300009806 276 | 030005000907203001000790000000000500003006100600051807205360000300008000004000090 277 | 080100054300097080070800006050704000003000040020000000000085030000400000618970000 278 | 031200008005001600800003000000030091000007284700000000100000400004600902002000016 279 | 200170000007080004600000000000000000046000397030407001000300000061708029000020106 280 | 006000002270039060905000307060000000000105000000092051300908000000400800100027000 281 | 013402500000900702470000000000000000061008000800205016000000001506804020000650000 282 | 007000000043602009000030800000000000005000690216040350000000000500810403801000920 283 | 200008000000500309006237000000180703050040000100000400607010000001300006005006080 284 | 000290700000000045100004230000010006500970000801430000010000800094000601200000070 285 | 000000000090174000471800009000000000000207000050090237006003040005020000130500670 286 | 007600000000007020001380500000030000080004105005200740000400000604800350010003009 287 | 000000005025008700001000040000003000070904008082006910010000000007060803630700090 288 | 000200004000370002602400930080004000000605000001790005100006400000900306008000009 289 | 000103500010045000700209000001000002020000059007520600006700000089000200003080040 290 | 000053002039000007801007900100708260008501000000620000400000000973100000000000080 291 | 001003000000100832080000000010005200075906080060008000700304009000000058050090300 292 | 000600000200100060009820000008000710006000482500000003100904007070061000904050000 293 | 030000080000010200000506900090040065300005019000063002900002107070000000061000008 294 | 000100005090007000021059000100000007003700560400065013200030000000000400000581200 295 | 106700000000000970004230608003009700000000040700020109805000000241307000030000000 296 | 007000009009500800200000300001002703000750001503004080100000000005070100000380092 297 | 090200000000014000400000862000000000961042030020800090340000005000031700000480009 298 | 000000000072010006580000900100790060000006008400000700259030000003800500040900073 299 | 000600170003000000000002083049001000800700400000094300005000200600057040080260700 300 | 004002000100068750700900001007003080000010300000689502000000000001000600500701200 301 | 205000004000460020080000039050007000706321000002800090009002300020000000001070400 302 | 000009000000800906061000030000007000004000370009041502000020007300000105800510420 303 | 348000002000060083060000100090080000683100070201000000900004300000000008000031209 304 | 005060000090504800073008004000000000000106050507003901009000000402000019030000702 305 | 000000000400068035000000240005001004000080000904003601750304006009010000061700000 306 | 000000000070000806362010070003000040090702010086400030005080000010004000040021085 307 | 000006000000930100000070962060400000003000050450007600034000090190040706600000081 308 | 000000000000029640290000503000000050083017009570204001000001000700042300000060705 309 | 000080000000504200540072860063010005081000600000000040000030020054700000802000506 310 | 000000010200010307010873905031000058000000600760001000090000000380060104000002080 311 | 060002070000000500030071092092065087010004009700900000801000000004090010000000045 312 | 000008006006105708000000000000200000007980230020300071001000500703000860052070009 313 | 000000800018200600704003000001058006000700001070020080005000360306504020000030400 314 | 360020709900300210004000030506000008009208000000500400050000000490005380000070002 315 | 001005000005070020437019000108000000000000078060000230000000006000807400006041592 316 | 090030200004007130000400070000005000040706380060100702851304060006000000030000000 317 | 000980010700030600090100002000002000000790206902000308100000000807460000050000763 318 | 086009000105080200004130700000000000060004038000392005000050002000000060010920804 319 | 000000000020003040005708036000000000002830000074265080001000005580002104000300870 320 | 000003020000400006074506003058000030100800700020000040000700001500640200081005600 321 | 500020000000374000074000090000008001002730040008250306060010000000003080703000109 322 | 000083000583120600401009000000006000040000900602000380300070810009060000810000007 323 | 000000300204830000083001004076000120000009030905000000000075000000600418600408070 324 | 000000900201060700007200065060008090002300040003004802010002000006030050009740000 325 | 003040000000070006000128000021080030070000040300007001010602804200090010008000360 326 | 000000000010900008800003020200009010090061072060720403074000500900000001000407009 327 | 007013040204090017000040000920000704000930005001000003000070900000300000030405601 328 | 480090300307002006000000080030006002800250000065037000000000430500078000090400005 329 | 000008000060031000207090000042000001000003480010000076009000000020007030038625190 330 | 000900000002004056031000000005000109010250360004000020000700002100002600026093005 331 | 700060000080041000002900041000000010000039287027000300003000090095103006000005070 332 | 000001000020000008691200000000000014102506003800020506005000000730000000006319405 333 | 900500008300040920068003050000960010000007004007430602700309000000000080050100000 334 | 700006003000010000000090400300025790000160000040037050062000537108000600000000019 335 | 000000000000001006080465700000007000009000200003159060097000000046700902021043007 336 | 000000000005002803060009054000000000093560010020091047000000071030000400072104006 337 | 018040060003006091004003002006580000080010023045000000000000006000000130000300289 338 | 000000000000700023130009400000043000040800192580900000008002000400100206010070038 339 | 000013207014002803000005000000030000569070000023500108006000001000000705290007000 340 | 018500002000230004030001059000009010045000096093010200084000005006004000000000070 341 | 000000000004260000906057004050000000000080029080900056001008090008500340700603001 342 | 200060000070900050809005706000000039003008002040000500000070000090286010106503000 343 | 000000000106050300037018604000009000051230700069080000000000080010000003280003160 344 | 001200700003600018700000200000050020420108000005002100000004005649001800030900000 345 | 500070000063000090700302504076020001001600008050100009040000020000903000007010080 346 | 800010405000000060063000700700000000000072039000800000680300904010004380047900006 347 | 004000000060523008350100007000050200400208760001006000030000000000095000007800359 348 | 060000000307000008180062040003008002000405180000720400010500000708001000200006700 349 | 400000000009301000385064007040000000000000368600700200060570000800409006094100000 350 | 000070098000600050006000104020000001304906020001027080000000009150300000940005800 351 | 001002009074000000932700406800000603000060904300009050000023040700500000000100300 352 | 000170430003009001000200005000000000700023004036054700805300000002500000004090608 353 | 006700024400005907070010605300006800041000000000002000020001490000000006000049702 354 | 000000004207060190600093000000001000002080709100906850806000407000000080700050020 355 | 000070500200004063006002080090085000500260007021040000005009004000000630000030970 356 | 080010000000007208300040160000700300409300850600000000903002084000930500050070000 357 | 000020907000400080006003050000000000090060040000209518000014070081072004060030090 358 | 108000500027900000900701800804309000002040103000020009000004300000200950400008000 359 | 000560000000070310080031006000000000960080007005000032100000040030017065006304100 360 | 000800001000027096007500830040300000300050007095608000001902008004000300000006010 361 | 009080000000100000680007019020004007100030040460790000070060003000002090096300020 362 | 000000710000009020060571009500000800073800000040300207154020900007000100000045000 363 | 010208000000050607000671020300500001001000040060002050000007000027000090605190002 364 | 080000000002654010405000000000008041008000020170000860000009000050340089200001604 365 | 081094000250000000000070000720010030005000090096380007000008400510000009008100025 366 | 003000006120708004504001070008900500040306700300000002000800400001005800000010090 367 | 010080000690004002000006500006039240040010050839000060062540000400000100000000020 368 | 607080001000000700090000305020010800005000007800006400010930004900005000002801509 369 | 000000600960000000084050100003009004200017800850040020506028000020700000400005070 370 | 090005006800100900000000000084000000520016000603908005000030500300050800750002140 371 | 000007000003056020970010640000000002007020930020000160000000000061500490009640070 372 | 400000501005064000009000000000050100001009705050100924004503007000007602200090000 373 | 000900004000070800280000103670000000030000201021090060090500000800234007000710080 374 | 000004000005007600108500270000006000300000082509048100050000010801090720600070000 375 | 097001600604070030530000004010060072000003000008700301000020000040096080070000900 376 | 000008006050300010007106002000000904913000020065030007030080000001500800500000043 377 | 000000070068000200057902003800010000000800010004000002070204000083090500500130790 378 | 000000000050030900004100052206800003508060010031020600000000005000002308000501024 379 | 040002300800010000009605020000000000074003060901427000000000100090000230005230074 380 | 000080060800007003940250000000020000600301000028670300000000000310000096409008021 381 | 060000050902000061300006402400060000030052090500403000089000040000007200000820010 382 | 000000000054090067001020048000600000730000004580000030060907000040860079008040003 383 | 073090000000480070804000203900300800000050000316900000000005107060700000500019008 384 | 050060020040000700000002081060040800000006040004098030086000300000000270097083600 385 | 054000800980030600601908040010000000000890700500620008000050060090000073470060000 386 | 090004025036000910000000004300000000200670408004500002940150000000700009178090000 387 | 003000000008007100560090002005304600000070000320600570030002007002000000670813050 388 | 050000000210050903009208460000000000092300580000085600005004009020000040040009706 389 | 004609100060050027100402006300000092000003040475000003890006200000000000000907300 390 | 080060000002000180070003000000001200043000010051076438020000000038000720006709050 391 | 000000500004301060690804203000030450900008702000209006000000000200983000089070000 392 | 000000000760045000905030746010000050086001073009002000008000060090080507000020038 393 | 000008900603049010000500600004000009230000001050002060007000000302051000508960203 394 | 307600002000001804090000570000003049953460008020000005002000000580036000009500000 395 | 000005000007060430406008205002000000008074900601800000003500000060001020100327090 396 | 010007000000590230050800000006000000200900300590702080104070003000200640029040005 397 | 000000000540090003000010764000003000604000201290000030000004016010069307706000045 398 | 000000760000008005400260000010050004700080530300006100000001000087000003640035871 399 | 000000004000005079090020531000079000060508000070000350000001000015092807200807015 400 | 250007001000004050010020367000600000000081030080040706620100070009400008800006003 401 | --------------------------------------------------------------------------------