M(0,1) called.  Cache key = 1
M(0,1): # Changes to land on the origin at index 2: 1
M(0,1): Calling M(2,0).
  M(2,0) called.  Cache key = 602
  M(2,0): Calculated directly since cl == 0: Returning 1
M(0,1): Best value when land on the origin at index 2: 2
M(0,1): Found a new max: 2
M(0,1): # Changes to land on the origin at index 4: 2
M(0,1): # Changes to land on the origin at index 6: 1
M(0,1): Calling M(6,0).
  M(6,0) called.  Cache key = 1806
  M(6,0): Calculated directly since cl == 0: Returning 0
M(0,1): Best value when land on the origin at index 6: 1
M(0,1): # Changes to land on the origin at index 8: 1
M(0,1): Calling M(8,0).
  M(8,0) called.  Cache key = 2408
  M(8,0): Calculated directly since cl == 0: Returning 2
M(0,1): Best value when land on the origin at index 8: 3
M(0,1): Found a new max: 3
M(0,1): # Changes to land on the origin at index 10: 1
M(0,1): Calling M(10,0).
  M(10,0) called.  Cache key = 3010
  M(10,0): Calculated directly since cl == 0: Returning 1
M(0,1): Best value when land on the origin at index 10: 2
M(0,1): # Changes to land on the origin at index 12: 1
M(0,1): Calling M(12,0).
  M(12,0) called.  Cache key = 3612
  M(12,0): Calculated directly since cl == 0: Returning 0
M(0,1): Best value when land on the origin at index 12: 1
M(0,1): Returning 3
3