Một robot được thiết kế để di chuyển trên một lưới hình chữ nhật gồm \(M\) hàng và \(N\) cột. Robot ban đầu được định vị tại ô \((1, 1)\), tức là ô trên cùng bên trái. Robot phải tiếp cận tế bào lưới \((M, N)\). Trong mỗi bước, robot chỉ có thể di chuyển đến các tế bào theo hướng đông (phải) và nam (xuống) ngay lập tức. Điều đó có nghĩa là nếu robot hiện đang ở ô \((i, j)\), nó có thể di chuyển đến ô \((i + 1, j)\) hoặc \((i, j + 1)\), miễn là robot không rời khỏi lưới.
Bây giờ, ai đó đã đặt một số chướng ngại vật ở các vị trí ngẫu nhiên trên lưới, làm cho robot không thể vượt qua các ô đó. Với vị trí của các ô bị chặn, nhiệm vụ của bạn là đếm số đường đi mà robot có thể di chuyển từ \((1, 1)\) đến \((M, N)\). Vì số đường đi có thể rất lớn, bạn cần đưa ra kết quả theo modulo \(10^9+7\).
Dữ liệu vào
- Dòng đầu tiên chứa ba số nguyên \(M, N\) và \(P\) lần lượt biểu thị số hàng, số cột, và số ô bị chặn.
- \(P\) dòng tiếp theo, mỗi dòng chứa hai số nguyên \(i\) và \(j\) biểu thị rằng ô \((i, j)\) bị chặn.
Dữ liệu ra
- Đầu ra là một số nguyên duy nhất, biểu thị số lượng đường đi của robot từ \((1, 1)\) đến \((M, N)\).
Ràng buộc
- \(1 \le M,N \le 10^5\)
- \(0 \le P \le 2000\)
Input 1
3 4 2
2 2
1 4
Output 1
3
Input 2
5 2 2
2 1
4 2
Output 2
0
Input 3
5 5 4
3 1
3 5
1 3
5 3
Output 3
24
Input 4
100000 100000 1
50000 50000
Output 4
123445622
Nhận xét