У нас є сітка з \(H\) горизонтальними рядками і \(W\) вертикальними стовпцями клітин. Клітина (\(i,j\)) знаходиться в \(i\)-му рядку зверху та \(j\)-му стовпці зліва, є стіною, якщо \(S_{ij}\) дорівнює #, і дорогою, якщо \(S_{ij }\) є '.'. У клітині (1, 1) стоїть ферзь, шахова фігура. За один рух він може переміщати будь-яку кількість квадратів праворуч, вниз або по діагоналі в нижній правий бік по вільних клітинах, не перестрибуючи через стіни.
Скількома способами ферзь може пройти від клітини (1, 1) до клітини (\(H, W\))?
Знайдіть кількість за модулем (\(10^9 + 7\)).
Тут два шляхи переміщення вважаються різними тоді і тільки тоді, коли існує \(i\) такий, що положення ферзя після \(i\)-го ходу різне в цих двох шляхах.
Формат вхідних даних
Перший рядок містить цілі числа \(H, W\) (\(2 \le N \le 2000\))
Наступні \(N\) рядків містять \(S_{ij}\) (\(S_{ij}\) = '.', '#', \(S_{11}=S_{HW}='.'\))
Формат вихідних даних
У вихідний потік виведіть шукану кількість шляхів.
Примітка
До прикладу 1:
Існує 10 шляхів, а саме:
(1,1)→(1,2)→(1,3)→(2,3)→(3,3)
(1,1)→(1,2)→(1,3)→(3,3)
(1,1)→(1,2)→(2,3)→(3,3)
(1,1)→(1,3)→(2,3)→(3,3)
(1,1)→(1,3)→(3,3)
(1,1)→(2,1)→(3,1)→(3,2)→(3,3)
(1,1)→(2,1)→(3,1)→(3,3)
(1,1)→(2,1)→(3,2)→(3,3)
(1,1)→(3,1)→(3,2)→(3,3)
(1,1)→(3,1)→(3,3)
Приклад вхідних даних
3 3
...
.#.
...
Приклад вихідних даних
10
Приклад вхідних даних
4 4
...#
....
..#.
....
Приклад вихідних даних
84
Приклад вхідних даних
8 10
..........
..........
..........
..........
..........
..........
..........
..........
Приклад вихідних даних
13701937
Коментарі