# Answer for https://stackoverflow.com/questions/65445073/number-of-ways-to-bottom-right-of-matrix-with-obstacles-with-any-size-skips-righ
 
rows = 4
cols = 3
 
matrix = """
    ...
    .*.
    ...
    ...
"""
 
M = [list(r) for r in matrix.split()]
print(M)
 
#(num_ways_here, cumulative_from_north, cumulative_from_east)
one = [None] * cols
two = [None] * cols
 
for i, r in enumerate(M):
  for j, c in enumerate(r):
    if (0, 0) == (i, j):
      two[j] = (1, 1, 1)
    elif M[i][j] == "*":
      two[j] = (0, 0, 0)
    elif i == 0:
      (c, n, e) = two[j-1]
      curr = e
      two[j] = (e, curr, e + curr)
    elif j == 0:
      (c, n, e) = one[j]
      curr = n
      two[j] = (curr, n + curr, curr)
    else:
      (cw, nw, ew) = two[j-1]
      (cn, nn, en) = one[j]
      curr = ew + nn
      two[j] = (curr, nn + curr, ew + curr)
  one = two
  two = [None] * cols
  print(one)
 
print(one[cols-1][0])
				IyBBbnN3ZXIgZm9yIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY1NDQ1MDczL251bWJlci1vZi13YXlzLXRvLWJvdHRvbS1yaWdodC1vZi1tYXRyaXgtd2l0aC1vYnN0YWNsZXMtd2l0aC1hbnktc2l6ZS1za2lwcy1yaWdoCgpyb3dzID0gNApjb2xzID0gMwoKbWF0cml4ID0gIiIiCiAgICAuLi4KICAgIC4qLgogICAgLi4uCiAgICAuLi4KIiIiCgpNID0gW2xpc3QocikgZm9yIHIgaW4gbWF0cml4LnNwbGl0KCldCnByaW50KE0pCgojKG51bV93YXlzX2hlcmUsIGN1bXVsYXRpdmVfZnJvbV9ub3J0aCwgY3VtdWxhdGl2ZV9mcm9tX2Vhc3QpCm9uZSA9IFtOb25lXSAqIGNvbHMKdHdvID0gW05vbmVdICogY29scwoKZm9yIGksIHIgaW4gZW51bWVyYXRlKE0pOgogIGZvciBqLCBjIGluIGVudW1lcmF0ZShyKToKICAgIGlmICgwLCAwKSA9PSAoaSwgaik6CiAgICAgIHR3b1tqXSA9ICgxLCAxLCAxKQogICAgZWxpZiBNW2ldW2pdID09ICIqIjoKICAgICAgdHdvW2pdID0gKDAsIDAsIDApCiAgICBlbGlmIGkgPT0gMDoKICAgICAgKGMsIG4sIGUpID0gdHdvW2otMV0KICAgICAgY3VyciA9IGUKICAgICAgdHdvW2pdID0gKGUsIGN1cnIsIGUgKyBjdXJyKQogICAgZWxpZiBqID09IDA6CiAgICAgIChjLCBuLCBlKSA9IG9uZVtqXQogICAgICBjdXJyID0gbgogICAgICB0d29bal0gPSAoY3VyciwgbiArIGN1cnIsIGN1cnIpCiAgICBlbHNlOgogICAgICAoY3csIG53LCBldykgPSB0d29bai0xXQogICAgICAoY24sIG5uLCBlbikgPSBvbmVbal0KICAgICAgY3VyciA9IGV3ICsgbm4KICAgICAgdHdvW2pdID0gKGN1cnIsIG5uICsgY3VyciwgZXcgKyBjdXJyKQogIG9uZSA9IHR3bwogIHR3byA9IFtOb25lXSAqIGNvbHMKICBwcmludChvbmUpCgpwcmludChvbmVbY29scy0xXVswXSk=
				
				
				
				
				
			 
			
				
			
			
				
	
		
		
	
	
		[['.', '.', '.'], ['.', '*', '.'], ['.', '.', '.'], ['.', '.', '.']]
[(1, 1, 1), (1, 1, 2), (2, 2, 4)]
[(1, 2, 1), (0, 0, 0), (2, 4, 2)]
[(2, 4, 2), (2, 2, 4), (8, 12, 12)]
[(4, 8, 4), (6, 8, 10), (22, 34, 32)]
22