Hành trình đổi đời

View as PDF

Time limit: 1.0s , Memory limit: 256M , Points: 10 (partial)

Kichirou mở mắt, nhận ra mình đang đứng giữa một mê cung kỳ lạ. Dưới chân anh là một ô đá vuông vức - điểm xuất phát (1 ,1). Trước mặt anh là những con đường dài hun hút, với một số lối đi mở ('.') và một số bức tường chắn ngang ('#').

Anh không có bản đồ, không có chỉ dẫn. Chỉ biết rằng đích đến nằm ở góc bên kia - tọa độ (n, m). Nhưng có một quy tắc nghiệt ngã: anh chỉ được đi xuống hoặc sang phải.

Anh chậm rãi bước về phía trước, cẩn thận chọn đường đi để không bị mắc kẹt. Mỗi ngã rẽ là một lựa chọn, mỗi bước chân là một quyết định. Các bạn hãy giúp anh ấy tìm xem có bao nhiêu con đường để đi từ (1 ,1) đến (n, m). Vì kết quả có thể sẽ rất lớn nên hãy in kết quả sau khi chia dư cho 10^9 + 7.

Một số tính chất của phép chia dư:

  • (a + b) \mod m = [(a \mod m) + (b \mod m)] \mod m
  • (a - b) \mod m = [(a \mod m) - (b \mod m)] \mod m
  • (a \cdot b) \mod m = [(a \mod m) \cdot (b \mod m)] \mod m

Input

  • Dòng đầu tiên chứa hai số nguyên dương n, m (1 \le n, m \le 1000).
  • n hàng tiếp theo, mỗi hàng chứa m kí tự ('.') hoặc ('#'). Đảm bảo ô ở tọa độ (1 ,1)(n, m) luôn là ('.').

Output

  • Dòng duy nhất in ra kết quả là số đường đi từ (1 ,1) đến (n, m) sau khi chia dư cho 10^9 + 7.

Scoring

  • Subtask 1 (40% số điểm):  2 \le n + m \le 22.
  • Subtask 2 (60% số điểm):  1 \le n, m \le 1000.

Samples

Sample Input 1

3 4
...#
.#..
....

Sample Output 1

3

Comments