input: Write a python function to find all possible paths from (0, 0) to (x, y) on a grid.
  assert find_all_ways(2, 2) == [[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2)], [(0, 0), (1, 0), (1, 1), (2, 1), (2, 2)], [(0, 0), (1, 0), (1, 1), (1, 2), (2, 2)], [(0, 0), (0, 1), (1, 1), (2, 1), (2, 2)], [(0, 0), (0, 1), (1, 1), (1, 2), (2, 2)], [(0, 0), (0, 1), (0, 2), (1, 2), (2, 2)]]
  assert find_all_ways(1, 2) == [[(0, 0), (1, 0), (1, 1), (1, 2)], [(0, 0), (0, 1), (1, 1), (1, 2)], [(0, 0), (0, 1), (0, 2), (1, 2)]]
  assert find_all_ways(2, 1) == [[(0, 0), (1, 0), (2, 0), (2, 1)], [(0, 0), (1, 0), (1, 1), (2, 1)], [(0, 0), (0, 1), (1, 1), (2, 1)]]
output: def find_all_ways(x, y):
      def backtrack(cx, cy, path):
          if cx == x and cy == y:
              paths.append(path[:])
              return
          if cx < x:
              path.append((cx + 1, cy))
              backtrack(cx + 1, cy, path)
              path.pop()
          if cy < y:
              path.append((cx, cy + 1))
              backtrack(cx, cy + 1, path)
              path.pop()
  
      paths = []
      backtrack(0, 0, [(0, 0)])
      return paths