solve( 0, 0): start solve( 0, 0): let's go up solve(-1, 0): start solve(-1, 0): we're blocked! Returning false. solve( 0, 0): let's go right solve( 0, 1): start solve( 0, 1): let's go up solve(-1, 1): start solve(-1, 1): we're blocked! Returning false. solve( 0, 1): let's go right solve( 0, 2): start solve( 0, 2): let's go up solve(-1, 2): start solve(-1, 2): we're blocked! Returning false. solve( 0, 2): let's go right solve( 0, 3): start solve( 0, 3): we're blocked! Returning false. solve( 0, 2): let's go down solve( 1, 2): start solve( 1, 2): let's go up solve( 0, 2): start solve( 0, 2): we're blocked! Returning false. solve( 1, 2): let's go right solve( 1, 3): start solve( 1, 3): we're blocked! Returning false. solve( 1, 2): let's go down solve( 2, 2): start solve( 2, 2): we're blocked! Returning false. solve( 1, 2): let's go left solve( 1, 1): start solve( 1, 1): we're blocked! Returning false. solve( 1, 2): *** need to backtrack solve( 0, 2): let's go left solve( 0, 1): start solve( 0, 1): we're blocked! Returning false. solve( 0, 2): *** need to backtrack solve( 0, 1): let's go down solve( 1, 1): start solve( 1, 1): we're blocked! Returning false. solve( 0, 1): let's go left solve( 0, 0): start solve( 0, 0): we're blocked! Returning false. solve( 0, 1): *** need to backtrack solve( 0, 0): let's go down solve( 1, 0): start solve( 1, 0): let's go up solve( 0, 0): start solve( 0, 0): we're blocked! Returning false. solve( 1, 0): let's go right solve( 1, 1): start solve( 1, 1): we're blocked! Returning false. solve( 1, 0): let's go down solve( 2, 0): start solve( 2, 0): we're blocked! Returning false. solve( 1, 0): let's go left solve( 1, -1): start solve( 1, -1): we're blocked! Returning false. solve( 1, 0): *** need to backtrack solve( 0, 0): let's go left solve( 0, -1): start solve( 0, -1): we're blocked! Returning false. solve( 0, 0): *** need to backtrack ###0110001111 #0#0101111001 0000101010100 1110111010111 1010000111001 1011111101111 1000000000000 111111111111=