#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long int lli;
const lli mod = 1e9 +7;

int main(){
    int n;
    cin >> n;
    vector<char> c(n);
    for(int i=0; i<n; i++){
        cin >> c[i];
    }

    //dp[i][j] := i番目までで未確定の個数がj個の場合の数
    vector<vector<lli> > dp(n+1, vector<lli>(n+2, 0));
    dp[0][0] = 1;
    for(int i=0; i<n; i++){
        for(int j=0; j<=n; j++){
            if(dp[i][j] == 0) continue;
            if(c[i] == '-'){
                dp[i+1][j] = dp[i][j];
            }
            if(c[i] == 'U'){
                //単純に未定が1つ増える
                dp[i+1][j+1] += dp[i][j];
                dp[i+1][j+1] %= mod;
                //未定の一つを今見ている順位で確定する
                dp[i+1][j] += dp[i][j]*j %mod;
                dp[i+1][j] %= mod;
            }
            if(c[i] == 'D'){
                //未定のどれかを割り当てる
                dp[i+1][j] += dp[i][j]*j %mod;
                dp[i+1][j] %= mod;
                //さらに未定の一つを今見ている順位で確定する
                dp[i+1][j-1] += dp[i][j]*j*j %mod;
                dp[i+1][j-1] %= mod;
            }
        }
    }
    cout << dp[n][0] << endl;
    return 0;
}
