CSES - Shared codeLink to this code: https://cses.fi/paste/64c88fb27fdff78418c661/
/*
Author: Devdatta Pandey
Designation: B.Tech Student(NIT Patna)
Date: --/--/---- 

Finding logic and writing code is an art. It is once intellectual property.
So please don't copy or use it only for reference. Try to solve the question yourself.
*/


#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <chrono>
#include <complex>
#define ll long long int
#define mod 1000000007
#define inf 1000000000000000001 

using namespace std; 

ll lcm(ll a, ll b)
{
    return a*b/__gcd(a, b);
}
ll expo(ll a, ll b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1)
        res = (res * a) % mod;
        a = (a * a) % mod;
        b = b >> 1;
    }
    return res;
}
void extendgcd(ll a, ll b, ll*v)
{
    if (b == 0)
    {
        v[0] = 1;
        v[1] = 0;
        v[2] = a;
        return ;
    }
    extendgcd(b, a % b, v); 
    ll x = v[1];
    v[1] = v[0] - v[1] * (a / b);
    v[0] = x; 
    return;
}
ll mminv(ll a, ll b)
{
    ll arr[3];
    extendgcd(a, b, arr);
    return arr[0];
}
ll mminvprime(ll a, ll b)
{
    return expo(a, b - 2);
}
ll mod_add(ll a, ll b, ll m = mod)
{
    a = a % m;
    b = b % m;
    return (((a + b) % m) + m) % m;
}
ll mod_mul(ll a, ll b, ll m = mod)
{
    a = a % m; b = b % m;
    return (((a * b) % m) + m) % m;
}
ll mod_sub(ll a, ll b, ll m = mod)
{
    a = a % m; b = b % m;
    return (((a - b) % m) + m) % m;
}
ll mod_div(ll a, ll b, ll m = mod)
{
    a = a % m; b = b % m;
    return (mod_mul(a, mminvprime(b, m), m) + m) % m;
}
ll fibonacci(ll n)
{
    ll number = n;
    if (n % 2 == 0)
    {
        number /= 2;
        while (n % 2 == 0)
        n /= 2;
    }
    for (ll i = 3; i <= sqrt(n); i += 2)
    {
        if (n % i == 0)
        {
            while (n % i == 0)n /= i;
            number = (number / i * (i - 1));
        }
    }
    if (n > 1)
    number = (number / n * (n - 1));
    return number;
}



void solve()
{
    int n;
    cin >> n;
    int dp[n][n];
    memset(dp, 0, sizeof(dp));
    dp[0][0] = 1;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            if(1 != 0 && j != 0)
            dp[i][j] = 0;
            char ch;
            cin >> ch;
            if(i != 0)
            dp[i][j] =  mod_add(dp[i][j], dp[i-1][j]);
            if(j != 0)
            dp[i][j] = mod_add(dp[i][j], dp[i][j-1]);
            if(ch == '*')
            dp[i][j] = 0;
        }
    }
    cout << dp[n-1][n-1] << endl;
}


int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0);

    ll tc = 1;
    //cin >> tc;

    for (ll i = 1; i <= tc; i++)
    {
        solve();
    }

    return 0;
}