func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = int(3002), mod = int(1e9) + 7;   char second[N][N];   int n, m;   long long dp1[N][N], dp2[N][N], a, b, c, d;   bool used[N][N];   inline long long dp(int x, int y) {     if (x <= 0 || y <= 0) return 0;     if (second[x][y] ==  # ) return 0;     if (x == 1 && y == 2) return 1;     if (used[x][y]) return dp1[x][y];     used[x][y] = 1;     return dp1[x][y] = (dp(x - 1, y) + dp(x, y - 1)) % mod;   }   inline long long rec(int x, int y) {     if (x <= 0 || y <= 0) return 0;     if (second[x][y] ==  # ) return 0;     if (x == 2 && y == 1) return 1;     if (used[x][y]) return dp2[x][y];     used[x][y] = 1;     return dp2[x][y] = (rec(x - 1, y) + rec(x, y - 1)) % mod;   }   int main() {     scanf( %d%d n , &n, &m);     for (int i = 1; i <= n; i++) {       scanf( %s n , second[i] + 1);     }     a = rec(n, m - 1), c = rec(n - 1, m);     memset(used, 0, sizeof(used));     b = dp(n - 1, m), d = dp(n, m - 1);     a = a * b % mod;     c = c * d % mod;     a = (a - c) % mod;     if (a < 0) a += mod;     printf( %d , a);     return 0;   }   