diff --git a/Board.py b/Board.py
index d3432ed6cd3a2968805fc303f3cd1f2469031e3d..3ca9c7a80b7c720f050f0acb4abacdf2dba5aa1c 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
Binary files a/__pycache__/Board.cpython-36.pyc and b/__pycache__/Board.cpython-36.pyc differ
diff --git a/game.py b/game.py
index 49e87cabaf1deb06192deaca406b9ff2d2ac0ec0..e26f2233d18adaef5c3e765c0276181683cb8cbf 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 8de950219d961ba72a58ef83eab82dc02a073154..d06f48ccede005249296b4a391867dc08a1861d3 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 0000000000000000000000000000000000000000..a669eb2aaa50a1d425e58b80528b97c496aaa14e
--- /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 0000000000000000000000000000000000000000..3eba2efb629af01e2f6ad055ba52415cb97e3809
--- /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 0000000000000000000000000000000000000000..5fcca17a2fc649ef9a8d89853558048d2fb1731d
--- /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 0000000000000000000000000000000000000000..e59d3b9dfe9986d8421bbe4e34a5bfa71f89cdaa
--- /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 0000000000000000000000000000000000000000..3516f5d1dd539289da69d95e99300ab0582df373
--- /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 0000000000000000000000000000000000000000..852b5b19d624e8cddcab0496977eadea5b2d10c3
--- /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 f95cf7f6c6f4ef66e1f77fba55033f851d97ce51..b080c8d12a745da6f6c6d3c6e71daddeac0f79c2 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 0000000000000000000000000000000000000000..c0262db52914bb6be6659682912cfa616b67de5b
--- /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 0000000000000000000000000000000000000000..dcb8912691e2dd68eb2c752e95d89ab900a884ac
--- /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 0000000000000000000000000000000000000000..48ce15108c645e95accf98c0e75274380109d295
--- /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 0000000000000000000000000000000000000000..11e6c35f1eb0091bd77fcebc7f9b378b7ac4c896
--- /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 0000000000000000000000000000000000000000..633b7c4d24b0fb7f66dceaad2a0d1c4c96f60257
--- /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 0000000000000000000000000000000000000000..62131c408174e340dcd095b5dc22d120e79ce409
--- /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 0000000000000000000000000000000000000000..993f24ba98de544792387e6d038aec102dda717b
--- /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 0000000000000000000000000000000000000000..0eb62f9c9e82cb389fc40a01b5882656ceb76c30
--- /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}
+
+