Enough of the tiling problems. Time for some 2D dynamic programming. You can work in any programming language of your choice - Python, C++, Java, or anything else you want. Let's get started!

# Problem Statement

You are given a grid with n rows and m columns. Some of the grid locations are blocked, and cannot be entered. Find the number of paths from the top-left corner of the grid to the bottom right corner.

Your solution should have run-time O(nm).

# Examples

**Example 1:**

............

Number of paths = 10

**Example 2:**

..#.#.#.....

Number of paths = 1

**Example 3:**

...#.#......

Number of paths = 3

# Submitting your solution

Once you are confidant of your solution, take the quiz! It will provide you with some grids to run your code on.

# Progressive 'hint-by-hint' solution

Only look at the hints if you can't solve the problem for **at-least 20-minutes**. Read **only one hint** that you could not figure out on your own. Then spend **at-least 20-minutes** trying to solve the problem again.

Hint 1 (dp state):

Hint 2 (recursion):

# Full solution

The solution for this assignment is included at the end of the quiz.