Please solve the programming task below using a self-contained code snippet in a markdown code block.

You are given an m x n integer array grid where grid[i][j] could be:

1 representing the starting square. There is exactly one starting square.
2 representing the ending square. There is exactly one ending square.
0 representing empty squares we can walk over.
-1 representing obstacles that we cannot walk over.

Return the number of 4-directional walks from the starting square to the ending square, that walk over every non-obstacle square exactly once.
 
Please complete the following python code precisely:
```python
class Solution:
    def uniquePathsIII(self, grid: List[List[int]]) -> int:
```