public class SchoolLoad {
public int solution(int m, int n, int[][] puddles) {
int[][] dp = new int[n + 1][m + 1];
for (int[] puddle : puddles) {
dp[puddle[1]][puddle[0]] = -1;
}
dp[1][1] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (dp[i][j] == -1) {
continue;
} else if (i == 1 && j > 1) {
dp[i][j] = dp[i][j - 1];
} else if (j == 1 && i > 1) {
dp[i][j] = dp[i - 1][j];
} else if (i != 1 && j != 1) {
if (dp[i - 1][j] == -1 && dp[i][j - 1] == -1) {
dp[i][j] = 0;
} else if (dp[i - 1][j] == -1) {
dp[i][j] = dp[i][j - 1];
} else if (dp[i][j - 1] == -1) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % 1000000007;
}
}
}
}
return dp[n][m];
}
}