From d99d8919983a4942aafff4f529b0c71b4e5e287d Mon Sep 17 00:00:00 2001
From: Sean Paeglis <s.paeglis@student.unimelb.edu.au>
Date: Thu, 11 Apr 2019 18:03:48 +1000
Subject: [PATCH] df

---
 Board.py                         |   7 +-
 __pycache__/Board.cpython-36.pyc | Bin 2757 -> 2935 bytes
 game.py                          |   2 +
 game2.py                         | 125 ++++++-
 in10                             | 108 ++++++
 in6old                           |  92 +++++
 input10.json                     |   5 +
 input9.json                      |   5 +
 out                              | 100 +++++
 out10                            | 104 ++++++
 out4                             | 127 ++++---
 out5                             |  89 +++++
 out6                             |  93 +++++
 out8                             | 111 ++++++
 out9                             |  91 +++++
 outnew                           | 280 ++++++++++++++
 outnew10                         | 109 ++++++
 outnew10.1                       | 621 +++++++++++++++++++++++++++++++
 outnew2                          |  88 +++++
 19 files changed, 2082 insertions(+), 75 deletions(-)
 create mode 100644 in10
 create mode 100644 in6old
 create mode 100644 input10.json
 create mode 100644 input9.json
 create mode 100644 out
 create mode 100644 out10
 create mode 100644 out5
 create mode 100644 out6
 create mode 100644 out8
 create mode 100644 out9
 create mode 100644 outnew
 create mode 100644 outnew10
 create mode 100644 outnew10.1
 create mode 100644 outnew2

diff --git a/Board.py b/Board.py
index d3432ed..3ca9c7a 100644
--- a/Board.py
+++ b/Board.py
@@ -1,9 +1,6 @@
 import Tile
 class Board:
     # List of exit tiles. Only red at the moment
-    exit_tiles = {'red':[(3,-3), (3,-2), (3,-1), (3,0)],
-            'green':[(-3,3),(-2,3),(-1,3),(0,3)],
-            'blue':[(0,-3),(-1,-2),(-2,-1),(-3,0)]}
     """
     directions = ['l', 'tl', 'tr', 'r', 'br', 'bl']
     moves = {'l':(-1,0), 'tl':(0,-1), 'tr':(1,-1), 'r':(1,0),
@@ -15,6 +12,10 @@ class Board:
     def __init__(self):
         # Create board state array
         # None means an empty tile and 0 means a tile not on the board
+        
+        self.exit_tiles = {'red':[(3,-3), (3,-2), (3,-1), (3,0)],
+            'green':[(-3,3),(-2,3),(-1,3),(0,3)],
+            'blue':[(0,-3),(-1,-2),(-2,-1),(-3,0)]}
         self.tiles = [[None for i in range(7)] for j in range(7)]
         self.tiles[0][0] = 0
         self.tiles[0][1] = 0
diff --git a/__pycache__/Board.cpython-36.pyc b/__pycache__/Board.cpython-36.pyc
index 59ff8c998f3173122c9a776294ea3b006d6e8b36..16ddc245c98bb8521a0a6d91764c5285997893a0 100644
GIT binary patch
delta 1267
zcmX>q`dy6En3tC;=;68;?TMVB^&Sii45<uJj42FJOeu^}%qapXLMb9CqA6l266tJF
zEGaB0tSt;ttSM|M>@5sYY$+TmoGlDd>?vF++${`I94S00ye$k-oGE<444RU+Se^0{
zi&CnVa49G#D5PW-r6!kT=I0eF*eXP;=cwx_sFy&<A`rVsU8i0_JqgTC%2AI6Ys$?p
zO9iQ~R?ktl($F>3G0=o)v(hlo(KQ5fiqx$%451td+dxwXtQ%x42!l)oX#lHFf|_Kg
zS&O3RB_l&U149ub0|P@ch+tq~U;xqV3=9m;3=9m#EQ|~cDZDBCDS|0N=`1NCpg>8H
zOlL`vPLWGdOi@l}NnxGCT*DC0012KF#uScbMi+)=#u|orrWBSMhAgHO7D<K_78?d6
z9y5YhFUgR?1m`lNC<XBlN|{jPI3*cUxZwJ@B^gq<ZD3Y_cnCQzNrn_oxEzRwP{}1}
z1~w+0p@t!z8RWuv7BI;Q7GX;PiL<9L1T$!=_`PIiU|@L3#K6E%#60o7>g4~7s~LqS
zuVzYR6rL=|Y+V161tiY~B3MDh-~a#rYcdsqM2kc~0{@T%L_q@okp#pT7#LuxL2&@q
zqR9lNAZCEHXfhRnD2M=53y3OW0mY;y6F4p*vLGvA0w8t~SRF{WCKG}UF%BdJGaAGO
z+X}NB<Qh$mTU@CXnI-WhnK`M&Mf?m547XUp>|1OFnW@RC#kVF`GMfqUfKrVXC>^nI
zF>)~qF^Wt+$Sgeh0yE3xOU!N@(hyI|O;%u0WK`Si#PWeL5EQBq7lSM+5&{{`m|Fx2
z!Xg2XdiEkokQj48esPgFh{cwipOar&bc+?7Rf;6QVu=L>sd*`yY(;XDyVx8UwI-it
zyX1*#wk8u;ZILp_RF)z+1_p*Gwvza?qWs(_mXi3A{33Nw<Z{9ZkZ+1K7#J8FCqHBF
z7Xh0Fa+fCKE#}0eVomlUxyhXz7K|Q~4{<0*f&&#6wqU=2f)W-5AT~?|*dUOACQ}iZ
z4N?tL2o``!f~X?q$y{8TD!16<<5TjJ<Kv4|LGF_W5sDx}6GVU<S)@BTm`jm|kAZ=K
QgN=nrfQdtDatoIu03&et6aWAK

delta 1063
zcmew^c2tzpn3tF9kj|PI$%&ky^%)Ed45<uJj42FJOesPsA}L}i;^{0Yk}1+DvMF-u
zEGY^p$|-6o8tE)4taF&7m{YV;bW-$E^ivE{jMCYnSW?(h*jpH)SW`GsI9nK^*iyJs
zxLX*a*i(2?cv~2vI8yjh_*)pFI8y|I88nS=u{z}^7NxvoW?*1=$;80G!1R)F@&qQ;
zdPW8Y29TgL0|P_xJq8Ab6vh;$7KRdr6y|0|7lvlW8ishr6qXu>EXEWTNrn^_8wMmE
zD+-Sd&SOPU3F0ACvLVaWr?5*hq;SABa!N9!aH8-KavYKjDeQ1L5D%de#N)7GNN1>F
zh-U&hFrFDqvVcWcQ$XTuDGb33np}R#AU`vJ!hnHc@(!jIj6#zWnNt~sCLd=uRwx2V
z7O^rgFch(X!U{~Vfmk3hP4>x;S-iRVL4l<LGJ<)sJ!>3?I0FNNCR35r<fW{NjH;WD
zvwmQV04Xm5g)GEGAqED9Ta3A2LyH7J>e-7#L1N4W`Ng-mQY$h`;!84fQj2e~CFkel
zmloY(&CM@MEiMuPDPl`3C`ipq(PS%<n#{rBz^FOdljD*nsuh|{V6{c^Aj4UTq!<_&
zqS#8}(~9zQqgYDfOY)0AE-vB(c@0ePfLN*w3=9sFQ#kuYz@~w`tI2qaIWehNlf6i4
zGCP+Aqx)nBF6H`{fB*mgugL`Qk~Szn{viqIfCT;{3Fv}c0aXnSQjiu+rXmmpF$1JU
zlc@+qK?I;$KonR&lL-=Z;6SVgX@rS@*hOG<Al;fw2sXqxkQB^l5F2bO%yO`6K%y{x
z$O3RS*hoz#NJ`LUU{D7|FgS=nN?;BF3m}`tI(ZM5rb3YdC}@>Hgfxhd1rcf>0u<au
dT9Y}s6$L;kf`f^Rk&97)U4V&0Y_b`*BLMkZ#rXgL

diff --git a/game.py b/game.py
index 49e87ca..e26f223 100644
--- a/game.py
+++ b/game.py
@@ -43,6 +43,8 @@ def main():
                 bdict = make_bdict(node)
                 print_board(bdict)
                 """
+                bdict = make_bdict(node)
+                print_board(node)
                 if not node.toMove:
                     continue
                 if node.toMove[0] == 'e':
diff --git a/game2.py b/game2.py
index 8de9502..d06f48c 100644
--- a/game2.py
+++ b/game2.py
@@ -1,4 +1,5 @@
 import cProfile
+import pickle
 import sys
 import heapq
 import json
@@ -13,6 +14,12 @@ exit_tiles = {'red':[(3,-3),(3,-2),(3,-1),(3,0)],
         'green':[(-3,3),(-2,3),(-1,3),(0,3)],
         'blue':[(0,-3),(-1,-2),(-2,-1),(-3,0)]}
 
+tile_map = {"0-3":1,"1,-3":2,"2-3":3,"3-3":4,"-1-2":5,"0-2":6,"1-2":7,"2-2":8,
+        "3-2":9,"-2-1":10,"-1-1":11,"0-1":12,"1-1":13,"2-1":14,"3-1":15,
+        "-30":16,"-20":17,"-10":18,"00":19,"10":20,"20":21,"30":22,"-31":23,
+        "-21":24,"-11":25,"01":26,"11":27,"21":28,"-32":29,"-22":30,"-12":31,
+        "02":32,"12":33,"-33":34,"-23":35,"-13":36,"03":37}
+
 def main():
     with open(sys.argv[1]) as file:
         
@@ -33,16 +40,25 @@ def main():
         colour = data['colour']
         bdict = make_bdict(board)
         print_board(bdict)
+        
+        nonBlockTiles = []
+        for tile in exit_tiles[colour]:
+            if type(board.tiles[tile[1]+3][tile[0]+3]) == Block.Block:
+                pass
+            else:
+                nonBlockTiles.append(tile)
+        exit_tiles[colour] = nonBlockTiles
+        board.exit_tiles[colour] = nonBlockTiles
+        print(exit_tiles[colour])
+
+
         # Run a* search and print solution if one exists
         path = A_Star(board)
         if path is None:
             print("No path found")
         else:
             for node in path:
-                """
-                bdict = make_bdict(node)
-                print_board(bdict)
-                """
+         
                 if not node.toMove:
                     continue
                 if node.toMove[0] == 'e':
@@ -55,16 +71,33 @@ def main():
                     print ("JUMP from " + str(node.toMove[1]) + " to " + str(node.toMove[2]) + ".")
 
 
+def makeHash(node):
+    h = str(len(node.pieces))
+    spos = []
+    for p in node.pieces:
+        s = str(p.pos[0]) + str(p.pos[1])
+        spos.append(s)
+    spos.sort()
+    for piece in spos:
+        h += piece
+    return h
+
+
+
+
 def A_Star(start):
 
     # Initialise open and closed sets
     closedSet = {}
     openSet = [start]
     openSet2 = {}
+    idx = makeHash(start)
+    """
     idx = str(len(start.pieces)) + ":"
     for p in start.pieces:
         idx += str(p.pos[0]) + ":"
         idx += str(p.pos[1])
+    """
     openSet2[idx] = start
     
     # Initial path length and heuristic
@@ -90,10 +123,13 @@ def A_Star(start):
 
         # Remove the current node from the open set and add it to the closed set
         #openSet.remove(current)
+        idx = makeHash(current)
+        """
         idx = str(len(current.pieces)) + ":"
         for p in current.pieces:
             idx += str(p.pos[0]) + ":"
             idx += str(p.pos[1])
+            """
         del openSet2[idx]
         closedSet[idx] = current
         
@@ -144,17 +180,30 @@ def A_Star(start):
                 heapq.heappush(openSet, neighbor)
                 #openSet.append(neighbor)
             """
+            idx = makeHash(neighbor)
+            """
             idx = str(len(neighbor.pieces)) + ":"
             for p in neighbor.pieces:
                 idx += str(p.pos[0]) + ":"
                 idx += str(p.pos[1])
+                """
             if idx in openSet2:
                 node = openSet2[idx]
                 if tentative_gScore < node.g:
+                    """
                     node.parent = current
                     node.g = tentative_gScore
                     node.f = node.g + heuristic(node)
+                    heapq.heapify(openSet)"""
+                    del openSet2[idx]
+                    openSet.remove(node)
+                    neighbor.parent = current
+                    neighbor.g = tentative_gScore
+                    neighbor.f = neighbor.g + heuristic(neighbor)
                     heapq.heapify(openSet)
+                    heapq.heappush(openSet, neighbor)
+                    openSet2[idx] = neighbor
+
 
             else:
                 neighbor.parent = current
@@ -174,15 +223,62 @@ def listCompare(list1, list2):
     return True
 
 # Calculates the heuristic for a given board state
+"""
 def heuristic(node):
     h = 0
     for piece in node.pieces:
         min_dist = 10
         for tile in exit_tiles[piece.colour]:
-            if board.distance(piece.pos, tile) <= min_dist:
-                min_dist = board.distance(piece.pos, tile)
+            if node.distance(piece.pos, tile) <= min_dist:
+                min_dist = node.distance(piece.pos, tile)
         h += (min_dist / 2) + 1
     return h
+"""
+
+# Calculates the heuristic for a given board state
+def heuristic(node):
+    h = 0
+    for piece in node.pieces:
+        
+        h += (min_dist(piece)-position_value(node, piece) / 2) + 1
+    return h
+
+def position_value(node, piece):
+    adjacent_piece = pickle.loads(pickle.dumps(piece))
+    value = 0
+    for move in node.moves:
+        adjacent_piece.pos = (piece.pos[0] + move[0], piece.pos[1] + move[1])
+        adjacent_min = min_dist(adjacent_piece)
+        current_min = min_dist(piece)
+        if checkJump(node, piece.pos, move):
+            if adjacent_min < current_min:
+                value += 0.75
+            if adjacent_min == current_min:
+                value += 0.3	
+    return value
+        
+
+def min_dist(piece):
+    min_dist = 10
+    for tile in exit_tiles[piece.colour]:
+        if board.distance(piece.pos, tile) <= min_dist:
+            min_dist = board.distance(piece.pos, tile)
+    return min_dist
+
+def on_board(position):
+    if position[0] >= -3 and position[0] <= 3 and position[1] >= -3 and position[1] <= 3:
+        return True
+    else:
+        return False
+
+def checkJump(node, position, move):
+    new = (position[0] + move[0], position[1] + move[1])
+    new_jump = (position[0] + 2*move[0], position[1] + 2*move[1])
+    if on_board(new) and on_board(new_jump):
+        if type(board.tiles[new[0]+3][new[1]+3]) == Block.Block or type(board.tiles[new[0]+3][new[1]+3]) == Piece.Piece and type(board.tiles[new_jump[0]+3][new_jump[1]+3]) == None:
+            return True
+        else:
+            return False
 
 # Check if the goal has been reached
 def checkGoal(state):
@@ -210,7 +306,9 @@ def getNeighbors(current, closedSet):
     # getMoves returns only a Piece object if a piece is on an exit tile
     # In that case, the only neighbor is the same board with that piece removed
     if isinstance(moves, Piece.Piece):
-        neighbor = copy.deepcopy(current) 
+        #neighbor = copy.deepcopy(current) 
+        neighbor = pickle.loads(pickle.dumps(current))
+        neighbor.toMove = None
         neighbor.toMove = ['e'] + list(moves.pos)
 
         for piece in neighbor.pieces:
@@ -226,15 +324,22 @@ def getNeighbors(current, closedSet):
     # Otherwise, it returns a list of possible moves
     # In that case, return a list of board states with those moves applied
     for move in moves:
-        current.move(move[1], move[2]) 
+        current.move(move[1], move[2])
+        idx = makeHash(current)
+        """
         idx = str(len(current.pieces)) + ":"
         for p in current.pieces:
             idx += str(p.pos[0]) + ":"
             idx += str(p.pos[1])
+            """
 
         if idx not in closedSet:
-            neighbor = copy.deepcopy(current)
-            neighbor.toMove = list(move)
+            neighbor = pickle.loads(pickle.dumps(current))
+            #neighbor = copy.deepcopy(current)
+            neighbor.toMove = None
+            neighbor.toMove = list(move) 
+            if current.toMove == neighbor.toMove:
+                print(current.toMove)
             neighbors.append(neighbor)
 
         current.move(move[2], move[1]) 
diff --git a/in10 b/in10
new file mode 100644
index 0000000..a669eb2
--- /dev/null
+++ b/in10
@@ -0,0 +1,108 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |  p  |  p  |  p  |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+[(3, 0)]
+MOVE from (0, -3) to (0, -2).
+JUMP from (1, -3) to (-1, -1).
+JUMP from (0, -2) to (-2, 0).
+JUMP from (-3, 0) to (-1, 0).
+JUMP from (-1, -1) to (-1, 1).
+MOVE from (2, -3) to (1, -2).
+MOVE from (1, -2) to (0, -1).
+JUMP from (0, -1) to (-2, 1).
+JUMP from (-2, 0) to (-2, 2).
+JUMP from (-2, 1) to (-2, 3).
+JUMP from (-1, 1) to (-1, 3).
+JUMP from (-2, 3) to (0, 3).
+MOVE from (0, 3) to (1, 2).
+MOVE from (-2, 2) to (-2, 3).
+JUMP from (-2, 3) to (0, 3).
+MOVE from (-1, 0) to (-1, 1).
+JUMP from (0, 3) to (2, 1).
+MOVE from (-1, 3) to (0, 3).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+JUMP from (-1, 1) to (-1, 3).
+MOVE from (0, 3) to (1, 2).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+MOVE from (-1, 3) to (0, 3).
+MOVE from (0, 3) to (1, 2).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+MOVE from (2, 1) to (3, 0).
+EXIT from (3, 0).
+         65727069 function calls in 144.263 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+   211533   73.989    0.000   73.989    0.000 {built-in method _pickle.loads}
+   211533   30.804    0.000   30.804    0.000 {built-in method _pickle.dumps}
+     7743   10.738    0.001   21.267    0.003 {built-in method _heapq.heapify}
+ 48629750   10.624    0.000   10.624    0.000 Board.py:38(__lt__)
+        1    5.361    5.361  144.103  144.103 game2.py:88(A_Star)
+     9510    3.505    0.000    3.505    0.000 {method 'remove' of 'list' objects}
+  2606214    1.696    0.000    2.198    0.000 Board.py:72(distance)
+   328657    1.647    0.000    1.956    0.000 game2.py:74(makeHash)
+  1303107    1.181    0.000    3.379    0.000 game2.py:261(min_dist)
+   601434    0.840    0.000    1.138    0.000 game2.py:274(checkJump)
+    15101    0.814    0.000  106.646    0.007 game2.py:302(getNeighbors)
+   100239    0.771    0.000    5.865    0.000 game2.py:246(position_value)
+  7818642    0.502    0.000    0.502    0.000 {built-in method builtins.abs}
+    15101    0.370    0.000    0.388    0.000 Board.py:42(getMoves)
+   404522    0.363    0.000    0.363    0.000 Board.py:65(move)
+  1128172    0.298    0.000    0.298    0.000 game2.py:268(on_board)
+        1    0.160    0.160  144.263  144.263 game2.py:23(main)
+   328657    0.159    0.000    0.159    0.000 {method 'sort' of 'list' objects}
+  1579953    0.135    0.000    0.135    0.000 {method 'append' of 'list' objects}
+    26510    0.120    0.000    6.319    0.000 game2.py:239(heuristic)
+    15102    0.076    0.000    0.155    0.000 {built-in method _heapq.heappop}
+   328658    0.051    0.000    0.051    0.000 {built-in method builtins.len}
+    26509    0.038    0.000    0.055    0.000 {built-in method _heapq.heappush}
+    15196    0.012    0.000    0.012    0.000 {built-in method builtins.isinstance}
+    15102    0.008    0.000    0.008    0.000 game2.py:284(checkGoal)
+       32    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:350(make_bdict)
+        1    0.000    0.000    0.000    0.000 game2.py:363(print_board)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 game2.py:291(retrace)
+        1    0.000    0.000    0.000    0.000 game2.py:433(<listcomp>)
+       30    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+       14    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+       10    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+
+
diff --git a/in6old b/in6old
new file mode 100644
index 0000000..3eba2ef
--- /dev/null
+++ b/in6old
@@ -0,0 +1,92 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |  p  |  p  |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |  p  |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (0, 3) to (1, 2).
+MOVE from (1, -3) to (1, -2).
+JUMP from (2, -3) to (0, -1).
+JUMP from (1, -2) to (-1, 0).
+MOVE from (-1, 0) to (-1, 1).
+JUMP from (-1, 1) to (-1, 3).
+MOVE from (-1, 3) to (0, 3).
+JUMP from (0, 3) to (2, 1).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+MOVE from (0, -1) to (0, 0).
+MOVE from (0, 0) to (-1, 1).
+JUMP from (-1, 1) to (-1, 3).
+MOVE from (-1, 3) to (0, 3).
+MOVE from (0, 3) to (1, 2).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+MOVE from (2, 1) to (3, 0).
+EXIT from (3, 0).
+         839260 function calls in 6.864 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+    17514    3.129    0.000    3.129    0.000 {built-in method _pickle.loads}
+    17514    2.845    0.000    2.845    0.000 {built-in method _pickle.dumps}
+        1    0.271    0.271    6.845    6.845 game2.py:76(A_Star)
+    53944    0.203    0.000    0.241    0.000 game2.py:62(makeHash)
+     3254    0.108    0.000    6.351    0.002 game2.py:290(getNeighbors)
+    66350    0.057    0.000    0.057    0.000 Board.py:64(move)
+     3254    0.057    0.000    0.059    0.000 Board.py:41(getMoves)
+    70790    0.049    0.000    0.063    0.000 Board.py:71(distance)
+     3469    0.029    0.000    0.091    0.000 game2.py:215(heuristic)
+        1    0.019    0.019    6.864    6.864 game2.py:23(main)
+    53944    0.019    0.000    0.019    0.000 {method 'sort' of 'list' objects}
+   205490    0.018    0.000    0.018    0.000 {method 'append' of 'list' objects}
+    63603    0.016    0.000    0.016    0.000 Board.py:37(__lt__)
+   212370    0.014    0.000    0.014    0.000 {built-in method builtins.abs}
+     3255    0.010    0.000    0.019    0.000 {built-in method _heapq.heappop}
+    53945    0.007    0.000    0.007    0.000 {built-in method builtins.len}
+       29    0.006    0.000    0.012    0.000 {built-in method _heapq.heapify}
+     3468    0.003    0.000    0.005    0.000 {built-in method _heapq.heappush}
+      363    0.002    0.000    0.002    0.000 {method 'remove' of 'list' objects}
+     3350    0.002    0.000    0.002    0.000 {built-in method builtins.isinstance}
+     3255    0.001    0.000    0.001    0.000 game2.py:272(checkGoal)
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:338(make_bdict)
+       20    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 game2.py:351(print_board)
+        1    0.000    0.000    0.000    0.000 game2.py:279(retrace)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 game2.py:421(<listcomp>)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+       19    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+       13    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        3    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+       10    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+
+
diff --git a/input10.json b/input10.json
new file mode 100644
index 0000000..5fcca17
--- /dev/null
+++ b/input10.json
@@ -0,0 +1,5 @@
+{
+	"colour": "red",
+	"pieces": [[0,-3],[1,-3],[2,-3],[-3,0]],
+	"blocks": [[3,-3],[3,-2],[3,-1],[2,-1],[2,0],[1,0],[1,1],[0,1],[0,2],[-1,2]]
+}
diff --git a/input9.json b/input9.json
new file mode 100644
index 0000000..e59d3b9
--- /dev/null
+++ b/input9.json
@@ -0,0 +1,5 @@
+{
+	"colour" : "red",
+	"pieces" : [[0,-3],[-3,0],[0,3],[-3,3]],
+	"blocks": []
+}
diff --git a/out b/out
new file mode 100644
index 0000000..3516f5d
--- /dev/null
+++ b/out
@@ -0,0 +1,100 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |  p  |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |  p  |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |  p  |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+3-210-100
+JUMP from (-2, 1) to (0, 1).
+MOVE from (0, -1) to (1, -1).
+JUMP from (0, 0) to (2, -2).
+JUMP from (1, -1) to (3, -3).
+EXIT from (3, -3).
+JUMP from (0, 1) to (2, 1).
+MOVE from (2, -2) to (3, -2).
+EXIT from (3, -2).
+MOVE from (2, 1) to (3, 0).
+EXIT from (3, 0).
+         9957876 function calls (8380073 primitive calls) in 3.653 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+1341336/2356    1.419    0.000    3.523    0.001 copy.py:132(deepcopy)
+  2736077    0.363    0.000    0.363    0.000 {method 'get' of 'dict' objects}
+106810/32043    0.296    0.000    3.122    0.000 copy.py:210(_deepcopy_list)
+84384/2356    0.239    0.000    3.504    0.001 copy.py:268(_reconstruct)
+  1984141    0.184    0.000    0.184    0.000 {built-in method builtins.id}
+84384/2356    0.162    0.000    3.481    0.001 copy.py:236(_deepcopy_dict)
+    89293    0.153    0.000    0.449    0.000 copy.py:219(_deepcopy_tuple)
+   275578    0.133    0.000    0.186    0.000 copy.py:252(_keep_alive)
+   947999    0.089    0.000    0.089    0.000 {method 'append' of 'list' objects}
+   945486    0.086    0.000    0.086    0.000 copy.py:190(_deepcopy_atomic)
+    84384    0.074    0.000    0.074    0.000 {method '__reduce_ex__' of 'object' objects}
+   168768    0.062    0.000    0.062    0.000 {built-in method builtins.getattr}
+    89293    0.061    0.000    0.288    0.000 copy.py:220(<listcomp>)
+    84387    0.044    0.000    0.044    0.000 {built-in method builtins.hasattr}
+   168768    0.042    0.000    0.162    0.000 copy.py:273(<genexpr>)
+    84384    0.033    0.000    0.044    0.000 copyreg.py:87(__newobj__)
+   169141    0.029    0.000    0.029    0.000 {built-in method builtins.isinstance}
+     5561    0.023    0.000    0.027    0.000 game2.py:64(makeHash)
+    84384    0.022    0.000    0.022    0.000 {method 'update' of 'dict' objects}
+      277    0.019    0.000    3.569    0.013 game2.py:236(getNeighbors)
+        1    0.016    0.016    3.651    3.651 game2.py:78(A_Star)
+    23100    0.015    0.000    0.020    0.000 Board.py:71(distance)
+    84384    0.012    0.000    0.012    0.000 {built-in method builtins.issubclass}
+       66    0.012    0.000    0.021    0.000 {built-in method _heapq.heapify}
+    84384    0.012    0.000    0.012    0.000 {built-in method __new__ of type object at 0x9e3d20}
+    84384    0.011    0.000    0.011    0.000 {method 'items' of 'dict' objects}
+    57199    0.011    0.000    0.011    0.000 Board.py:37(__lt__)
+     1172    0.009    0.000    0.029    0.000 game2.py:207(heuristic)
+     5854    0.006    0.000    0.006    0.000 Board.py:64(move)
+      277    0.005    0.000    0.005    0.000 Board.py:41(getMoves)
+    69300    0.005    0.000    0.005    0.000 {built-in method builtins.abs}
+     5561    0.002    0.000    0.002    0.000 {method 'sort' of 'list' objects}
+        1    0.002    0.002    3.653    3.653 game2.py:22(main)
+     1105    0.001    0.000    0.001    0.000 {built-in method _heapq.heappush}
+     5562    0.001    0.000    0.001    0.000 {built-in method builtins.len}
+      278    0.001    0.000    0.002    0.000 {built-in method _heapq.heappop}
+      278    0.000    0.000    0.000    0.000 game2.py:218(checkGoal)
+       70    0.000    0.000    0.000    0.000 {method 'remove' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:278(make_bdict)
+        1    0.000    0.000    0.000    0.000 game2.py:291(print_board)
+       12    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 game2.py:361(<listcomp>)
+        1    0.000    0.000    0.000    0.000 game2.py:225(retrace)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+       10    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        7    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        3    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        4    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+
+
diff --git a/out10 b/out10
new file mode 100644
index 0000000..852b5b1
--- /dev/null
+++ b/out10
@@ -0,0 +1,104 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |  p  |  p  |  p  |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+4-300-31-32-3
+MOVE from (-3, 0) to (-2, 0).
+MOVE from (1, -3) to (0, -2).
+JUMP from (0, -3) to (0, -1).
+JUMP from (0, -2) to (0, 0).
+MOVE from (2, -3) to (1, -2).
+JUMP from (1, -2) to (-1, 0).
+JUMP from (0, -1) to (-2, 1).
+MOVE from (-1, 0) to (-1, 1).
+JUMP from (-1, 1) to (-1, 3).
+JUMP from (-2, 0) to (-2, 2).
+JUMP from (-2, 1) to (-2, 3).
+MOVE from (1, -1) to (0, 0).
+MOVE from (1, -1) to (0, 0).
+MOVE from (-2, 2) to (-2, 3).
+MOVE from (1, -1) to (0, 0).
+MOVE from (1, -1) to (0, 0).
+JUMP from (1, 2) to (3, 0).
+MOVE from (1, -1) to (0, 0).
+MOVE from (1, -1) to (0, 0).
+MOVE from (1, -1) to (0, 0).
+JUMP from (1, 2) to (3, 0).
+MOVE from (1, -1) to (0, 0).
+MOVE from (0, 0) to (-1, 1).
+JUMP from (-1, 1) to (-1, 3).
+MOVE from (-1, 3) to (0, 3).
+MOVE from (0, 3) to (1, 2).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+MOVE from (2, 1) to (3, 0).
+EXIT from (3, 0).
+         9235593 function calls in 113.392 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+   144971   66.942    0.000   66.942    0.000 {built-in method _pickle.loads}
+   144971   35.750    0.000   35.750    0.000 {built-in method _pickle.dumps}
+        1    4.051    4.051  113.242  113.242 game2.py:79(A_Star)
+   449312    2.093    0.000    2.491    0.000 game2.py:65(makeHash)
+    22035    0.937    0.000  106.289    0.005 game2.py:237(getNeighbors)
+  2263762    0.563    0.000    0.563    0.000 Board.py:37(__lt__)
+    22035    0.522    0.000    0.546    0.000 Board.py:41(getMoves)
+   564610    0.497    0.000    0.497    0.000 Board.py:64(move)
+      545    0.492    0.001    0.937    0.002 {built-in method _heapq.heapify}
+   613593    0.422    0.000    0.543    0.000 Board.py:71(distance)
+    22584    0.255    0.000    0.798    0.000 game2.py:208(heuristic)
+   449312    0.202    0.000    0.202    0.000 {method 'sort' of 'list' objects}
+  2156482    0.176    0.000    0.176    0.000 {method 'append' of 'list' objects}
+        1    0.149    0.149  113.392  113.392 game2.py:23(main)
+  1840779    0.121    0.000    0.121    0.000 {built-in method builtins.abs}
+    22036    0.100    0.000    0.206    0.000 {built-in method _heapq.heappop}
+   449313    0.065    0.000    0.065    0.000 {built-in method builtins.len}
+    22038    0.029    0.000    0.041    0.000 {built-in method _heapq.heappush}
+    22130    0.014    0.000    0.014    0.000 {built-in method builtins.isinstance}
+    22036    0.008    0.000    0.008    0.000 game2.py:219(checkGoal)
+     2925    0.002    0.000    0.002    0.000 {method 'remove' of 'list' objects}
+       32    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 game2.py:294(print_board)
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:281(make_bdict)
+       30    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 game2.py:364(<listcomp>)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 game2.py:226(retrace)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+       10    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+       14    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+
+
diff --git a/out4 b/out4
index f95cf7f..b080c8d 100644
--- a/out4
+++ b/out4
@@ -14,89 +14,92 @@
 #       '-._.-'-._.-'-._.-'-._.-'-._.-'
 #          |     |     |     |     |
 #          '-._.-'-._.-'-._.-'-._.-'
+4-21-300-100
+MOVE from (0, -1) to (1, -2).
+JUMP from (0, 1) to (0, -1).
 MOVE from (-3, 0) to (-2, 0).
 MOVE from (-2, 0) to (-1, -1).
-JUMP from (-1, -1) to (1, -1).
-JUMP from (-2, 1) to (0, 1).
-JUMP from (0, -1) to (2, -1).
-JUMP from (0, 1) to (2, 1).
-JUMP from (0, 0) to (2, -2).
+MOVE from (2, -2) to (1, -2).
+MOVE from (0, 0) to (0, -1).
+JUMP from (2, -1) to (2, -3).
 JUMP from (1, -1) to (3, -3).
+JUMP from (2, -1) to (2, -3).
+JUMP from (1, -2) to (3, -2).
+JUMP from (2, -1) to (2, -3).
+MOVE from (2, -3) to (3, -3).
 EXIT from (3, -3).
-MOVE from (2, 1) to (3, 0).
-EXIT from (3, 0).
-MOVE from (2, -1) to (3, -2).
-EXIT from (3, -2).
 MOVE from (2, -2) to (3, -3).
 EXIT from (3, -3).
-         568057445 function calls (483975328 primitive calls) in 241.139 seconds
+         438377765 function calls (370325947 primitive calls) in 168.217 seconds
 
    Ordered by: internal time
 
    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
-71237512/79022   82.996    0.000  213.082    0.003 copy.py:132(deepcopy)
-145111869   20.880    0.000   20.880    0.000 {method 'get' of 'dict' objects}
-5273690/1582107   16.499    0.000  190.758    0.000 copy.py:210(_deepcopy_list)
-4695044/79022   15.684    0.000  212.355    0.003 copy.py:268(_reconstruct)
-  5026161   12.114    0.000   30.281    0.000 copy.py:219(_deepcopy_tuple)
-     1509   11.717    0.008   22.342    0.015 {built-in method _heapq.heapify}
- 43876398   10.721    0.000   10.721    0.000 Board.py:37(__lt__)
-4695044/79022   10.654    0.000  211.468    0.003 copy.py:236(_deepcopy_dict)
-105670251   10.594    0.000   10.594    0.000 {built-in method builtins.id}
- 14663778    7.589    0.000   10.837    0.000 copy.py:252(_keep_alive)
- 47712449    5.137    0.000    5.137    0.000 {method 'append' of 'list' objects}
- 49489374    4.713    0.000    4.713    0.000 copy.py:190(_deepcopy_atomic)
-  4695044    4.655    0.000    4.655    0.000 {method '__reduce_ex__' of 'object' objects}
-  9390088    4.175    0.000    4.175    0.000 {built-in method builtins.getattr}
-  5026161    3.711    0.000   17.685    0.000 copy.py:220(<listcomp>)
-  4695047    3.074    0.000    3.074    0.000 {built-in method builtins.hasattr}
-  9390088    2.572    0.000    9.921    0.000 copy.py:273(<genexpr>)
-  4695044    2.319    0.000    3.128    0.000 copyreg.py:87(__newobj__)
-  9397928    1.886    0.000    1.886    0.000 {built-in method builtins.isinstance}
-     7745    1.809    0.000  215.417    0.028 game2.py:206(getNeighbors)
-        1    1.714    1.714  241.036  241.036 game2.py:58(A_Star)
-  4695044    1.467    0.000    1.467    0.000 {method 'update' of 'dict' objects}
-  4695044    0.810    0.000    0.810    0.000 {built-in method __new__ of type object at 0x9e3d20}
-  4695044    0.804    0.000    0.804    0.000 {built-in method builtins.issubclass}
-  4695044    0.778    0.000    0.778    0.000 {method 'items' of 'dict' objects}
-  1010061    0.714    0.000    0.922    0.000 Board.py:71(distance)
-    37241    0.425    0.000    1.346    0.000 game2.py:177(heuristic)
-   201026    0.268    0.000    0.268    0.000 Board.py:64(move)
-  3030183    0.207    0.000    0.207    0.000 {built-in method builtins.abs}
-     7745    0.202    0.000    0.214    0.000 Board.py:41(getMoves)
-        1    0.103    0.103  241.139  241.139 game2.py:16(main)
-     7746    0.056    0.000    0.122    0.000 {built-in method _heapq.heappop}
-    35731    0.047    0.000    0.076    0.000 {built-in method _heapq.heappush}
-   187282    0.042    0.000    0.042    0.000 {built-in method builtins.len}
-     7746    0.004    0.000    0.004    0.000 game2.py:188(checkGoal)
-     2206    0.001    0.000    0.001    0.000 {method 'remove' of 'list' objects}
+57661115/65260   62.393    0.000  157.650    0.002 copy.py:132(deepcopy)
+117459285   15.855    0.000   15.855    0.000 {method 'get' of 'dict' objects}
+4274110/1282233   12.277    0.000  141.112    0.000 copy.py:210(_deepcopy_list)
+3797303/65260   10.903    0.000  157.089    0.002 copy.py:268(_reconstruct)
+  4065160    8.476    0.000   22.083    0.000 copy.py:219(_deepcopy_tuple)
+ 85528967    7.871    0.000    7.871    0.000 {built-in method builtins.id}
+3797303/65260    7.815    0.000  156.424    0.002 copy.py:236(_deepcopy_dict)
+ 11868716    5.710    0.000    8.102    0.000 copy.py:252(_keep_alive)
+ 39270749    3.955    0.000    3.955    0.000 {method 'append' of 'list' objects}
+  3797303    3.556    0.000    3.556    0.000 {method '__reduce_ex__' of 'object' objects}
+ 40066991    3.541    0.000    3.541    0.000 copy.py:190(_deepcopy_atomic)
+     1284    3.493    0.003    6.576    0.005 {built-in method _heapq.heapify}
+ 14315544    3.143    0.000    3.143    0.000 Board.py:37(__lt__)
+  7594606    3.128    0.000    3.128    0.000 {built-in method builtins.getattr}
+  4065160    2.730    0.000   13.240    0.000 copy.py:220(<listcomp>)
+  3797306    2.058    0.000    2.058    0.000 {built-in method builtins.hasattr}
+  7594606    1.901    0.000    7.357    0.000 copy.py:273(<genexpr>)
+  3797303    1.506    0.000    2.039    0.000 copyreg.py:87(__newobj__)
+  7602203    1.372    0.000    1.372    0.000 {built-in method builtins.isinstance}
+  3797303    1.009    0.000    1.009    0.000 {method 'update' of 'dict' objects}
+        1    0.901    0.901  168.166  168.166 game2.py:78(A_Star)
+   168094    0.881    0.000    1.059    0.000 game2.py:64(makeHash)
+     7502    0.780    0.000  159.464    0.021 game2.py:236(getNeighbors)
+  3797303    0.580    0.000    0.580    0.000 {built-in method builtins.issubclass}
+  3797303    0.558    0.000    0.558    0.000 {method 'items' of 'dict' objects}
+  3797303    0.534    0.000    0.534    0.000 {built-in method __new__ of type object at 0x9e3d20}
+   517188    0.359    0.000    0.466    0.000 Board.py:71(distance)
+    19433    0.210    0.000    0.676    0.000 game2.py:207(heuristic)
+   190662    0.202    0.000    0.202    0.000 Board.py:64(move)
+     7502    0.168    0.000    0.178    0.000 Board.py:41(getMoves)
+  1551564    0.107    0.000    0.107    0.000 {built-in method builtins.abs}
+   168094    0.094    0.000    0.094    0.000 {method 'sort' of 'list' objects}
+        1    0.051    0.051  168.217  168.217 game2.py:22(main)
+     7503    0.043    0.000    0.090    0.000 {built-in method _heapq.heappop}
+   168095    0.029    0.000    0.029    0.000 {built-in method builtins.len}
+    18148    0.023    0.000    0.036    0.000 {built-in method _heapq.heappush}
+     7503    0.003    0.000    0.003    0.000 game2.py:218(checkGoal)
+     2172    0.001    0.000    0.001    0.000 {method 'remove' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 game2.py:291(print_board)
         1    0.000    0.000    0.000    0.000 {built-in method io.open}
-        1    0.000    0.000    0.000    0.000 game2.py:258(print_board)
-       16    0.000    0.000    0.000    0.000 {built-in method builtins.print}
-        1    0.000    0.000    0.000    0.000 game2.py:195(retrace)
-        1    0.000    0.000    0.000    0.000 game2.py:245(make_bdict)
-        1    0.000    0.000    0.000    0.000 game2.py:328(<listcomp>)
-        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
-       15    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 game2.py:278(make_bdict)
+       17    0.000    0.000    0.000    0.000 {built-in method builtins.print}
         1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 game2.py:361(<listcomp>)
+        1    0.000    0.000    0.000    0.000 game2.py:225(retrace)
         3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
-        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
         1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
         2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
-        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
-        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+       15    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
         1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
         8    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
         1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
         3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
-        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
-        4    0.000    0.000    0.000    0.000 Block.py:2(__init__)
         1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
-        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
-        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
-        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
         1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
-        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
         1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        4    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
 
 
diff --git a/out5 b/out5
new file mode 100644
index 0000000..c0262db
--- /dev/null
+++ b/out5
@@ -0,0 +1,89 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |  p  |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |  b  |  p  |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |  p  |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+4-21-300-100
+MOVE from (0, -1) to (1, -2).
+JUMP from (0, 1) to (0, -1).
+MOVE from (-3, 0) to (-2, 0).
+MOVE from (-2, 0) to (-1, -1).
+MOVE from (2, -2) to (1, -2).
+MOVE from (0, 0) to (0, -1).
+JUMP from (2, -1) to (2, -3).
+JUMP from (1, -1) to (3, -3).
+JUMP from (2, -1) to (2, -3).
+JUMP from (1, -2) to (3, -2).
+JUMP from (2, -1) to (2, -3).
+MOVE from (2, -3) to (3, -3).
+EXIT from (3, -3).
+MOVE from (2, -2) to (3, -3).
+EXIT from (3, -3).
+         18074063 function calls in 25.926 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+    65260    9.595    0.000    9.595    0.000 {built-in method _pickle.loads}
+    65260    6.442    0.000    6.442    0.000 {built-in method _pickle.dumps}
+     1284    3.537    0.003    6.683    0.005 {built-in method _heapq.heapify}
+ 14315544    3.187    0.000    3.187    0.000 Board.py:37(__lt__)
+   168094    0.816    0.000    0.978    0.000 game2.py:65(makeHash)
+        1    0.754    0.754   25.862   25.862 game2.py:79(A_Star)
+   517188    0.341    0.000    0.442    0.000 Board.py:71(distance)
+     7502    0.331    0.000   17.274    0.002 game2.py:237(getNeighbors)
+    19433    0.197    0.000    0.639    0.000 game2.py:208(heuristic)
+   190662    0.165    0.000    0.165    0.000 Board.py:64(move)
+     7502    0.157    0.000    0.166    0.000 Board.py:41(getMoves)
+  1551564    0.101    0.000    0.101    0.000 {built-in method builtins.abs}
+   785576    0.081    0.000    0.081    0.000 {method 'append' of 'list' objects}
+   168094    0.074    0.000    0.074    0.000 {method 'sort' of 'list' objects}
+        1    0.064    0.064   25.926   25.926 game2.py:23(main)
+     7503    0.033    0.000    0.064    0.000 {built-in method _heapq.heappop}
+   168095    0.023    0.000    0.023    0.000 {built-in method builtins.len}
+    18148    0.019    0.000    0.030    0.000 {built-in method _heapq.heappush}
+     7597    0.004    0.000    0.004    0.000 {built-in method builtins.isinstance}
+     7503    0.003    0.000    0.003    0.000 game2.py:219(checkGoal)
+     2172    0.001    0.000    0.001    0.000 {method 'remove' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:294(print_board)
+        1    0.000    0.000    0.000    0.000 game2.py:281(make_bdict)
+       17    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 game2.py:226(retrace)
+        1    0.000    0.000    0.000    0.000 game2.py:364(<listcomp>)
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+       15    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        8    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        4    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+
+
diff --git a/out6 b/out6
new file mode 100644
index 0000000..dcb8912
--- /dev/null
+++ b/out6
@@ -0,0 +1,93 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |  p  |  p  |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |  p  |
+#          '-._.-'-._.-'-._.-'-._.-'
+3031-32-3
+MOVE from (0, 3) to (1, 2).
+MOVE from (1, -3) to (1, -2).
+JUMP from (2, -3) to (0, -1).
+JUMP from (1, -2) to (-1, 0).
+MOVE from (-1, 0) to (-1, 1).
+JUMP from (-1, 1) to (-1, 3).
+MOVE from (1, -2) to (0, -1).
+MOVE from (1, -2) to (0, -1).
+JUMP from (1, 2) to (3, 0).
+MOVE from (1, -2) to (0, -1).
+MOVE from (0, -1) to (0, 0).
+MOVE from (0, 0) to (-1, 1).
+JUMP from (-1, 1) to (-1, 3).
+MOVE from (-1, 3) to (0, 3).
+MOVE from (0, 3) to (1, 2).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+MOVE from (2, 1) to (3, 0).
+EXIT from (3, 0).
+         844265 function calls in 6.940 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+    17558    3.168    0.000    3.168    0.000 {built-in method _pickle.loads}
+    17558    2.859    0.000    2.860    0.000 {built-in method _pickle.dumps}
+        1    0.282    0.282    6.920    6.920 game2.py:79(A_Star)
+    54174    0.208    0.000    0.248    0.000 game2.py:65(makeHash)
+     3276    0.105    0.000    6.408    0.002 game2.py:237(getNeighbors)
+     3276    0.058    0.000    0.061    0.000 Board.py:41(getMoves)
+    66678    0.058    0.000    0.058    0.000 Board.py:64(move)
+    70755    0.049    0.000    0.063    0.000 Board.py:71(distance)
+     3466    0.032    0.000    0.095    0.000 game2.py:208(heuristic)
+        1    0.020    0.020    6.940    6.940 game2.py:23(main)
+    54174    0.019    0.000    0.019    0.000 {method 'sort' of 'list' objects}
+   206411    0.018    0.000    0.018    0.000 {method 'append' of 'list' objects}
+    66668    0.017    0.000    0.017    0.000 Board.py:37(__lt__)
+   212265    0.014    0.000    0.014    0.000 {built-in method builtins.abs}
+     3277    0.011    0.000    0.020    0.000 {built-in method _heapq.heappop}
+       31    0.008    0.000    0.015    0.000 {built-in method _heapq.heapify}
+    54175    0.007    0.000    0.007    0.000 {built-in method builtins.len}
+     3434    0.004    0.000    0.005    0.000 {built-in method _heapq.heappush}
+     3372    0.002    0.000    0.002    0.000 {built-in method builtins.isinstance}
+     3277    0.001    0.000    0.001    0.000 game2.py:219(checkGoal)
+      340    0.000    0.000    0.000    0.000 {method 'remove' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+       21    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 game2.py:294(print_board)
+        1    0.000    0.000    0.000    0.000 game2.py:281(make_bdict)
+        1    0.000    0.000    0.000    0.000 game2.py:226(retrace)
+        1    0.000    0.000    0.000    0.000 game2.py:364(<listcomp>)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+       19    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+       13    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        3    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+       10    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+
+
diff --git a/out8 b/out8
new file mode 100644
index 0000000..48ce151
--- /dev/null
+++ b/out8
@@ -0,0 +1,111 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |  b  |  b  |  b  |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |  b  |  b  |  b  |  b  |     | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |  b  |  b  |  b  |  b  |  b  |  b  | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |  b  |  b  |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |  b  |  b  |  b  |  p  | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |  p  |  p  |
+#          '-._.-'-._.-'-._.-'-._.-'
+4-13031221
+JUMP from (0, 3) to (-2, 3).
+JUMP from (-1, 3) to (-3, 3).
+MOVE from (-3, 3) to (-3, 2).
+MOVE from (-2, 3) to (-3, 3).
+JUMP from (-3, 3) to (-3, 1).
+JUMP from (-3, 2) to (-3, 0).
+MOVE from (-3, 0) to (-2, -1).
+MOVE from (-3, 1) to (-3, 0).
+JUMP from (-3, 0) to (-1, -2).
+JUMP from (-2, -1) to (0, -3).
+MOVE from (0, -3) to (1, -3).
+JUMP from (2, 1) to (0, 3).
+MOVE from (0, 3) to (-1, 3).
+MOVE from (1, 2) to (0, 3).
+JUMP from (0, 3) to (-2, 3).
+JUMP from (-1, 3) to (-3, 3).
+MOVE from (-3, 3) to (-3, 2).
+MOVE from (-2, 3) to (-3, 3).
+JUMP from (-3, 3) to (-3, 1).
+JUMP from (-3, 2) to (-3, 0).
+MOVE from (-3, 0) to (-2, -1).
+MOVE from (-3, 2) to (-3, 1).
+MOVE from (-3, 2) to (-3, 1).
+JUMP from (1, -3) to (3, -3).
+MOVE from (-3, 2) to (-3, 1).
+MOVE from (-3, 1) to (-3, 0).
+MOVE from (-3, 0) to (-2, -1).
+JUMP from (-2, -1) to (0, -3).
+MOVE from (0, -3) to (1, -3).
+JUMP from (1, -3) to (3, -3).
+EXIT from (3, -3).
+MOVE from (-1, -2) to (0, -3).
+MOVE from (0, -3) to (1, -3).
+JUMP from (1, -3) to (3, -3).
+EXIT from (3, -3).
+MOVE from (2, -3) to (3, -3).
+EXIT from (3, -3).
+         455753 function calls in 8.351 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+     5794    4.033    0.001    4.033    0.001 {built-in method _pickle.loads}
+     5794    3.638    0.001    3.638    0.001 {built-in method _pickle.dumps}
+        1    0.338    0.338    8.337    8.337 game2.py:79(A_Star)
+    18172    0.090    0.000    0.107    0.000 game2.py:65(makeHash)
+     2115    0.047    0.000    7.847    0.004 game2.py:237(getNeighbors)
+     2115    0.047    0.000    0.048    0.000 Board.py:41(getMoves)
+    56028    0.039    0.000    0.050    0.000 Board.py:71(distance)
+     2257    0.028    0.000    0.078    0.000 game2.py:208(heuristic)
+    20524    0.020    0.000    0.020    0.000 Board.py:64(move)
+        1    0.014    0.014    8.351    8.351 game2.py:23(main)
+   168084    0.011    0.000    0.011    0.000 {built-in method builtins.abs}
+    45918    0.010    0.000    0.010    0.000 Board.py:37(__lt__)
+    18172    0.009    0.000    0.009    0.000 {method 'sort' of 'list' objects}
+    83294    0.007    0.000    0.007    0.000 {method 'append' of 'list' objects}
+      141    0.007    0.000    0.012    0.000 {built-in method _heapq.heapify}
+     2116    0.006    0.000    0.010    0.000 {built-in method _heapq.heappop}
+     2115    0.003    0.000    0.004    0.000 {built-in method _heapq.heappush}
+    18173    0.003    0.000    0.003    0.000 {built-in method builtins.len}
+     2210    0.001    0.000    0.001    0.000 {built-in method builtins.isinstance}
+     2116    0.001    0.000    0.001    0.000 game2.py:219(checkGoal)
+      457    0.000    0.000    0.000    0.000 {method 'remove' of 'list' objects}
+       39    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 game2.py:294(print_board)
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:281(make_bdict)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 game2.py:226(retrace)
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        1    0.000    0.000    0.000    0.000 game2.py:364(<listcomp>)
+       37    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+       20    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+       24    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+
+
diff --git a/out9 b/out9
new file mode 100644
index 0000000..11e6c35
--- /dev/null
+++ b/out9
@@ -0,0 +1,91 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |  p  |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |     |     | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |     |     |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |  p  |     |     |  p  |
+#          '-._.-'-._.-'-._.-'-._.-'
+4-30-330-303
+MOVE from (-3, 3) to (-2, 3).
+MOVE from (-2, 3) to (-1, 3).
+MOVE from (0, 3) to (0, 2).
+MOVE from (0, 3) to (0, 2).
+MOVE from (-3, 0) to (-2, -1).
+MOVE from (-2, -1) to (-1, -2).
+MOVE from (0, -3) to (0, -2).
+MOVE from (1, 2) to (1, 1).
+JUMP from (0, 2) to (2, 0).
+JUMP from (1, 1) to (3, -1).
+MOVE from (2, 1) to (2, 0).
+JUMP from (0, -2) to (2, -2).
+JUMP from (1, -2) to (3, -2).
+EXIT from (3, -2).
+MOVE from (2, 0) to (3, 0).
+EXIT from (3, 0).
+MOVE from (2, -2) to (3, -3).
+EXIT from (3, -3).
+         17685363 function calls in 42.611 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+   156974   19.057    0.000   19.057    0.000 {built-in method _pickle.loads}
+   156974   12.084    0.000   12.084    0.000 {built-in method _pickle.dumps}
+  9467319    2.282    0.000    2.282    0.000 Board.py:37(__lt__)
+      484    2.255    0.005    4.424    0.009 {built-in method _heapq.heapify}
+   421170    1.900    0.000    2.254    0.000 game2.py:65(makeHash)
+        1    1.538    1.538   42.506   42.506 game2.py:79(A_Star)
+    18728    0.791    0.000   34.116    0.002 game2.py:237(getNeighbors)
+   994986    0.684    0.000    0.879    0.000 Board.py:71(distance)
+   490934    0.420    0.000    0.420    0.000 Board.py:64(move)
+    36946    0.384    0.000    1.263    0.000 game2.py:208(heuristic)
+    18728    0.376    0.000    0.398    0.000 Board.py:41(getMoves)
+  2984958    0.195    0.000    0.195    0.000 {built-in method builtins.abs}
+   421170    0.177    0.000    0.177    0.000 {method 'sort' of 'list' objects}
+  1997816    0.162    0.000    0.162    0.000 {method 'append' of 'list' objects}
+        1    0.105    0.105   42.611   42.611 game2.py:23(main)
+    18729    0.088    0.000    0.179    0.000 {built-in method _heapq.heappop}
+   421171    0.055    0.000    0.055    0.000 {built-in method builtins.len}
+    36461    0.039    0.000    0.062    0.000 {built-in method _heapq.heappush}
+    18823    0.010    0.000    0.010    0.000 {built-in method builtins.isinstance}
+    18729    0.006    0.000    0.006    0.000 game2.py:219(checkGoal)
+     4186    0.002    0.000    0.002    0.000 {method 'remove' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+       20    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 game2.py:294(print_board)
+        1    0.000    0.000    0.000    0.000 game2.py:281(make_bdict)
+        1    0.000    0.000    0.000    0.000 game2.py:364(<listcomp>)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 game2.py:226(retrace)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        2    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+       18    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        4    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        2    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        2    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+
+
diff --git a/outnew b/outnew
new file mode 100644
index 0000000..633b7c4
--- /dev/null
+++ b/outnew
@@ -0,0 +1,280 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |  p  |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |  p  |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |  p  |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+3-210-100
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |  p  |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |  p  |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |  p  |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |  p  |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |  p  |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |  p  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (-2, 1) to (0, 1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |  p  |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |  p  |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (0, 1) to (2, 1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |  p  |  p  |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (0, 0) to (1, -1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  p  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (0, -1) to (2, -1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  p  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (2, -1) to (3, -2).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+EXIT from (3, -2).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |  p  | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (2, 1) to (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+EXIT from (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |  p  |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (1, -1) to (2, -2).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  p  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (2, -2) to (3, -3).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |     |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+EXIT from (3, -3).
+         136349 function calls in 0.084 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+    30074    0.022    0.000    0.028    0.000 Board.py:71(distance)
+      459    0.016    0.000    0.016    0.000 {built-in method _pickle.dumps}
+      459    0.015    0.000    0.015    0.000 {built-in method _pickle.loads}
+     4095    0.012    0.000    0.040    0.000 game2.py:241(min_dist)
+    90222    0.006    0.000    0.006    0.000 {built-in method builtins.abs}
+     1890    0.003    0.000    0.004    0.000 game2.py:254(checkJump)
+      315    0.003    0.000    0.047    0.000 game2.py:226(position_value)
+      311    0.002    0.000    0.002    0.000 game2.py:65(makeHash)
+        1    0.001    0.001    0.083    0.083 game2.py:79(A_Star)
+     3738    0.001    0.000    0.001    0.000 game2.py:248(on_board)
+       23    0.001    0.000    0.029    0.001 game2.py:282(getNeighbors)
+      125    0.000    0.000    0.051    0.000 game2.py:220(heuristic)
+       23    0.000    0.000    0.000    0.000 Board.py:41(getMoves)
+      286    0.000    0.000    0.000    0.000 Board.py:64(move)
+      124    0.000    0.000    0.000    0.000 {built-in method _heapq.heappush}
+        1    0.000    0.000    0.084    0.084 game2.py:23(main)
+       13    0.000    0.000    0.000    0.000 game2.py:326(make_bdict)
+       13    0.000    0.000    0.000    0.000 game2.py:339(print_board)
+     1569    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects}
+     1270    0.000    0.000    0.000    0.000 {built-in method builtins.isinstance}
+      311    0.000    0.000    0.000    0.000 {method 'sort' of 'list' objects}
+      480    0.000    0.000    0.000    0.000 Board.py:37(__lt__)
+       13    0.000    0.000    0.000    0.000 game2.py:409(<listcomp>)
+       25    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+       24    0.000    0.000    0.000    0.000 {built-in method _heapq.heappop}
+       13    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+      312    0.000    0.000    0.000    0.000 {built-in method builtins.len}
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+       80    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+       24    0.000    0.000    0.000    0.000 game2.py:264(checkGoal)
+        1    0.000    0.000    0.000    0.000 game2.py:271(retrace)
+       10    0.000    0.000    0.000    0.000 {method 'remove' of 'list' objects}
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+       11    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        3    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        4    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+
+
diff --git a/outnew10 b/outnew10
new file mode 100644
index 0000000..62131c4
--- /dev/null
+++ b/outnew10
@@ -0,0 +1,109 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |  p  |  p  |  p  |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+4-300-31-32-3
+MOVE from (0, -3) to (0, -2).
+MOVE from (2, -3) to (2, -2).
+MOVE from (2, -2) to (1, -1).
+JUMP from (1, -3) to (-1, -1).
+JUMP from (0, -2) to (-2, 0).
+JUMP from (0, -2) to (-2, 0).
+MOVE from (2, -2) to (1, -1).
+MOVE from (0, -1) to (-1, 0).
+JUMP from (2, -2) to (0, 0).
+JUMP from (2, -2) to (0, 0).
+JUMP from (2, -2) to (0, 0).
+JUMP from (2, -2) to (0, 0).
+JUMP from (2, -2) to (0, 0).
+JUMP from (2, -2) to (0, 0).
+JUMP from (2, -2) to (0, 0).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+JUMP from (1, -1) to (-1, 1).
+MOVE from (1, -1) to (0, 0).
+MOVE from (1, -1) to (0, 0).
+MOVE from (1, -1) to (0, 0).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+MOVE from (0, 0) to (-1, 1).
+JUMP from (-1, 1) to (-1, 3).
+MOVE from (-1, 3) to (0, 3).
+MOVE from (0, 3) to (1, 2).
+JUMP from (1, 2) to (3, 0).
+EXIT from (3, 0).
+MOVE from (2, 1) to (3, 0).
+EXIT from (3, 0).
+         55588767 function calls in 138.217 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+   221664   69.996    0.000   69.996    0.000 {built-in method _pickle.loads}
+   221664   36.922    0.000   36.922    0.000 {built-in method _pickle.dumps}
+  8378682    5.703    0.000    7.388    0.000 Board.py:71(distance)
+        1    5.483    5.483  138.067  138.067 game2.py:79(A_Star)
+     3342    4.040    0.001    7.875    0.002 {built-in method _heapq.heapify}
+ 15035121    3.988    0.000    3.988    0.000 Board.py:37(__lt__)
+  1171976    3.105    0.000   10.493    0.000 game2.py:241(min_dist)
+   400870    2.256    0.000    2.684    0.000 game2.py:65(makeHash)
+ 25136046    1.685    0.000    1.685    0.000 {built-in method builtins.abs}
+    19030    1.100    0.000  109.724    0.006 game2.py:282(getNeighbors)
+   540912    0.831    0.000    1.133    0.000 game2.py:254(checkJump)
+    90152    0.791    0.000   12.575    0.000 game2.py:226(position_value)
+    19030    0.540    0.000    0.565    0.000 Board.py:41(getMoves)
+   500654    0.521    0.000    0.521    0.000 Board.py:64(move)
+  1009461    0.302    0.000    0.302    0.000 game2.py:248(on_board)
+   400870    0.229    0.000    0.229    0.000 {method 'sort' of 'list' objects}
+  1934188    0.179    0.000    0.179    0.000 {method 'append' of 'list' objects}
+        1    0.150    0.150  138.217  138.217 game2.py:23(main)
+    23972    0.134    0.000   13.618    0.001 game2.py:220(heuristic)
+    19031    0.114    0.000    0.242    0.000 {built-in method _heapq.heappop}
+   400871    0.069    0.000    0.069    0.000 {built-in method builtins.len}
+    20629    0.047    0.000    0.071    0.000 {built-in method _heapq.heappush}
+    19125    0.019    0.000    0.019    0.000 {built-in method builtins.isinstance}
+    19031    0.011    0.000    0.011    0.000 game2.py:264(checkGoal)
+     2320    0.002    0.000    0.002    0.000 {method 'remove' of 'list' objects}
+       33    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        1    0.000    0.000    0.000    0.000 game2.py:326(make_bdict)
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:271(retrace)
+        1    0.000    0.000    0.000    0.000 game2.py:339(print_board)
+       31    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 game2.py:409(<listcomp>)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+       14    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+       10    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+
+
diff --git a/outnew10.1 b/outnew10.1
new file mode 100644
index 0000000..993f24b
--- /dev/null
+++ b/outnew10.1
@@ -0,0 +1,621 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |  p  |  p  |  p  |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+4-300-31-32-3
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |  p  |  p  |  p  |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |  p  |  p  |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |  p  |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (0, -3) to (0, -2).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |  p  |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |  p  |     |  p  |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (2, -3) to (2, -2).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |  p  |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |  p  |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (2, -2) to (1, -1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |  p  |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |  p  |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (1, -3) to (-1, -1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |  p  |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |  p  |  p  |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (0, -2) to (-2, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |  p  |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |  p  |  p  |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (0, -2) to (-2, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |  p  |  p  |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  p  |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (2, -2) to (1, -1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |  p  |  p  |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |  p  |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (0, -1) to (-1, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  p  |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |  p  |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (2, -2) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  p  |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |  p  |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (2, -2) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  p  |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |  p  |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (2, -2) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  p  |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |  p  | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (2, -2) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |  p  | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |  p  |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (2, -2) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |  p  | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |  p  |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (2, -2) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |  p  | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (2, -2) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |  p  | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (1, 2) to (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |  p  |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+EXIT from (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  p  |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (1, -1) to (-1, 1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |  p  |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (1, -1) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |  p  |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (1, -1) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |  p  | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (1, -1) to (0, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |  p  | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (1, 2) to (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |  p  |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+EXIT from (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |  p  |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (0, 0) to (-1, 1).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |  p  |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (-1, 1) to (-1, 3).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |  p  |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (-1, 3) to (0, 3).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |  p  | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (0, 3) to (1, 2).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |  p  | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+JUMP from (1, 2) to (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |  p  | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+EXIT from (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |  p  | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+MOVE from (2, 1) to (3, 0).
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |  b  | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |  b  | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |     |     |  b  |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |     |     |  b  |  b  |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |     |     |  b  |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |  b  |  b  |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+EXIT from (3, 0).
+         55593567 function calls in 137.304 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+   221664   69.671    0.000   69.671    0.000 {built-in method _pickle.loads}
+   221664   36.460    0.000   36.460    0.000 {built-in method _pickle.dumps}
+  8378682    5.680    0.000    7.355    0.000 Board.py:71(distance)
+        1    5.501    5.501  137.139  137.139 game2.py:79(A_Star)
+     3342    4.050    0.001    7.867    0.002 {built-in method _heapq.heapify}
+ 15035121    3.972    0.000    3.972    0.000 Board.py:37(__lt__)
+  1171976    3.085    0.000   10.440    0.000 game2.py:241(min_dist)
+   400870    2.252    0.000    2.672    0.000 game2.py:65(makeHash)
+ 25136046    1.676    0.000    1.676    0.000 {built-in method builtins.abs}
+    19030    1.063    0.000  108.947    0.006 game2.py:282(getNeighbors)
+   540912    0.834    0.000    1.133    0.000 game2.py:254(checkJump)
+    90152    0.761    0.000   12.423    0.000 game2.py:226(position_value)
+    19030    0.537    0.000    0.562    0.000 Board.py:41(getMoves)
+   500654    0.511    0.000    0.511    0.000 Board.py:64(move)
+  1009461    0.299    0.000    0.299    0.000 game2.py:248(on_board)
+   400870    0.224    0.000    0.224    0.000 {method 'sort' of 'list' objects}
+  1935372    0.177    0.000    0.177    0.000 {method 'append' of 'list' objects}
+        1    0.161    0.161  137.304  137.304 game2.py:23(main)
+    23972    0.130    0.000   13.458    0.001 game2.py:220(heuristic)
+    19031    0.112    0.000    0.242    0.000 {built-in method _heapq.heappop}
+   400871    0.068    0.000    0.068    0.000 {built-in method builtins.len}
+    20629    0.047    0.000    0.071    0.000 {built-in method _heapq.heappush}
+    22161    0.019    0.000    0.019    0.000 {built-in method builtins.isinstance}
+    19031    0.012    0.000    0.012    0.000 game2.py:264(checkGoal)
+     2320    0.002    0.000    0.002    0.000 {method 'remove' of 'list' objects}
+       33    0.001    0.000    0.002    0.000 game2.py:326(make_bdict)
+       33    0.001    0.000    0.002    0.000 game2.py:339(print_board)
+       33    0.000    0.000    0.000    0.000 game2.py:409(<listcomp>)
+       33    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+       65    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+      434    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:271(retrace)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+       31    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+       10    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        4    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+
+
diff --git a/outnew2 b/outnew2
new file mode 100644
index 0000000..0eb62f9
--- /dev/null
+++ b/outnew2
@@ -0,0 +1,88 @@
+# 
+#           .-'-._.-'-._.-'-._.-'-.
+#          |     |     |     |     | 
+#        .-'-._.-'-._.-'-._.-'-._.-'-.
+#       |     |     |     |     |     | 
+#     .-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+#    |     |     |  p  |     |     |  b  | 
+#  .-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-.
+# |     |     |  b  |  p  |     |     |     | 
+# '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#    |     |  p  |  b  |     |  b  |     | 
+#    '-._.-'-._.-'-._.-'-._.-'-._.-'-._.-'
+#       |     |     |     |     |     | 
+#       '-._.-'-._.-'-._.-'-._.-'-._.-'
+#          |     |     |     |     |
+#          '-._.-'-._.-'-._.-'-._.-'
+3-210-100
+JUMP from (-2, 1) to (0, 1).
+JUMP from (0, 1) to (2, 1).
+MOVE from (0, 0) to (1, -1).
+JUMP from (0, -1) to (2, -1).
+MOVE from (2, -1) to (3, -2).
+EXIT from (3, -2).
+MOVE from (2, 1) to (3, 0).
+EXIT from (3, 0).
+MOVE from (1, -1) to (2, -2).
+MOVE from (2, -2) to (3, -3).
+EXIT from (3, -3).
+         134621 function calls in 0.081 seconds
+
+   Ordered by: internal time
+
+   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
+    30074    0.022    0.000    0.028    0.000 Board.py:71(distance)
+      459    0.015    0.000    0.015    0.000 {built-in method _pickle.dumps}
+      459    0.013    0.000    0.013    0.000 {built-in method _pickle.loads}
+     4095    0.012    0.000    0.040    0.000 game2.py:243(min_dist)
+    90222    0.006    0.000    0.006    0.000 {built-in method builtins.abs}
+     1890    0.003    0.000    0.004    0.000 game2.py:256(checkJump)
+      315    0.003    0.000    0.047    0.000 game2.py:228(position_value)
+      311    0.001    0.000    0.002    0.000 game2.py:65(makeHash)
+        1    0.001    0.001    0.080    0.080 game2.py:79(A_Star)
+     3738    0.001    0.000    0.001    0.000 game2.py:250(on_board)
+       23    0.001    0.000    0.027    0.001 game2.py:284(getNeighbors)
+      125    0.000    0.000    0.051    0.000 game2.py:221(heuristic)
+       23    0.000    0.000    0.000    0.000 Board.py:41(getMoves)
+      286    0.000    0.000    0.000    0.000 Board.py:64(move)
+      124    0.000    0.000    0.000    0.000 {built-in method _heapq.heappush}
+        1    0.000    0.000    0.081    0.081 game2.py:23(main)
+      311    0.000    0.000    0.000    0.000 {method 'sort' of 'list' objects}
+      480    0.000    0.000    0.000    0.000 Board.py:37(__lt__)
+     1125    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects}
+      312    0.000    0.000    0.000    0.000 {built-in method builtins.len}
+       24    0.000    0.000    0.000    0.000 {built-in method _heapq.heappop}
+        1    0.000    0.000    0.000    0.000 game2.py:328(make_bdict)
+      119    0.000    0.000    0.000    0.000 {built-in method builtins.isinstance}
+        1    0.000    0.000    0.000    0.000 {built-in method io.open}
+        1    0.000    0.000    0.000    0.000 game2.py:341(print_board)
+       13    0.000    0.000    0.000    0.000 {built-in method builtins.print}
+        3    0.000    0.000    0.000    0.000 copyreg.py:96(_slotnames)
+        1    0.000    0.000    0.000    0.000 game2.py:411(<listcomp>)
+        1    0.000    0.000    0.000    0.000 decoder.py:345(raw_decode)
+        1    0.000    0.000    0.000    0.000 {method 'read' of '_io.TextIOWrapper' objects}
+       24    0.000    0.000    0.000    0.000 game2.py:266(checkGoal)
+        1    0.000    0.000    0.000    0.000 game2.py:273(retrace)
+       10    0.000    0.000    0.000    0.000 {method 'remove' of 'list' objects}
+        1    0.000    0.000    0.000    0.000 {method 'format' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 decoder.py:334(decode)
+        1    0.000    0.000    0.000    0.000 __init__.py:274(load)
+        3    0.000    0.000    0.000    0.000 {built-in method builtins.hasattr}
+       11    0.000    0.000    0.000    0.000 {method 'insert' of 'list' objects}
+        2    0.000    0.000    0.000    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _locale.nl_langinfo}
+        3    0.000    0.000    0.000    0.000 {method 'get' of 'mappingproxy' objects}
+        3    0.000    0.000    0.000    0.000 Piece.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 __init__.py:302(loads)
+        1    0.000    0.000    0.000    0.000 codecs.py:308(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:318(decode)
+        7    0.000    0.000    0.000    0.000 {method 'center' of 'str' objects}
+        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
+        1    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
+        2    0.000    0.000    0.000    0.000 {method 'end' of '_sre.SRE_Match' objects}
+        1    0.000    0.000    0.000    0.000 {built-in method _codecs.utf_8_decode}
+        4    0.000    0.000    0.000    0.000 Block.py:2(__init__)
+        1    0.000    0.000    0.000    0.000 codecs.py:259(__init__)
+        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
+
+
-- 
GitLab