// @EXPECTED_RESULTS@: RUN_TIME_ERROR, TIME_LIMIT_EXCEEDED, WRONG_ANSWER #include #include #include #define DP(i, j) dp[(i)*jumps+(j)] #define rep(i, n) for(int i = 0; i < n; i++) using namespace std; const int MOD = 1e9+7; int main() { cin.tie(0)->sync_with_stdio(0); int n; cin >> n; string s; cin >> s; int ans = 0; const int jumps = n+1; vector dp(n*jumps, 0); dp[0] = 1; rep(i, n) { if (s[i] == '#') continue; rep(j, jumps) if (i+1 < n) DP(i+1,j) = (DP(i+1,j) + DP(i,j)) % MOD; else ans = (ans + DP(i,j)) % MOD; rep(j, jumps-1) if (i+j+2 < n) DP(i+j+2,j+1) = (DP(i+j+2,j+1) + DP(i,j)) % MOD; else ans = (ans + DP(i,j)) % MOD; } cout << ans << '\n'; }