Problem:
問題名 箱根駅伝

日本のお正月の風物詩に箱根駅伝があります。箱根駅伝は、各チーム 10 人の走者が中継所ごとに襷をつなぎながらゴールを目指すというものです。テレビの放送では中継所で各チームの通過順位と共に前の中継所からの順位変動が表示されます。そこで、それを見て前の中継所の各チームの通過順として考えられるものが何通りあるか答えてください。ありえた通過順の数は非常に大きくなりうるので、1,000,000,007 で割った余りで答えて下さい。

Input

入力は以下の形で与えられます

n
c1
c2
...
cn

1行目にはチーム数を表す数字 n (1 ≤ n ≤ 200) が、続く n 行には 1 位から順に前の中継所からの順位変動 ci ('D' なら順位が落ちてる、'U' なら順位が上がってる、'-' なら順位が変わってない) が書いてあります。

Output

前の中継所でありえた通過順が何通りかを、 1,000,000,007 で割ったあまりで 1 行で出力して下さい。

Sample Input 1

3
-
U
D

Output for the Sample Input 1

1

この中継所を 1 位、 2 位、 3 位で通過したチームのチーム名をそれぞれ A, B, C とすると、前の中継所の通過順として考えられるのは 1 位：チーム A, 2 位：チーム C, 3 位：チーム B の 1 通りのみです。

Sample Input 2

5
U
U
-
D
D

Output for the Sample Input 2

5

この中継所の通過順にチーム名を A, B, C, D, E とすると、前の中継所の通過順として考えられるのは {D, E, C, A, B}, {D, E, C, B, A}, {E, D, C, A, B}, {E, D, C, B, A}, {D, A, C, E, B} の5通りです。

Sample Input 3

8
U
D
D
D
D
D
D
D

Output for the Sample Input 3

1

Sample Input 4

10
U
D
U
D
U
D
U
D
U
D

Output for the Sample Input 4

608

Sample Input 5

2
D
U

Output for the Sample Input 5

0

Solution in Ruby (judge verdict: Accepted)

DIV = 1_000_000_007
n = gets.to_i
l = n.times.map{ gets.chomp }
l.delete('-')
s = l.size
pos_u = [0]*s
pos_d = [0]*s
u = l.count('U')
d = l.count('D')
l.each_with_index do |str, i|
  if str == 'U' then (i+1...s).each{ |j| pos_u[j]+= 1 }
  else               (0...i).each{   |j| pos_d[j]+= 1 }
  end
end
dp = (s+1).times.map{ [0]*(s+1) }
dp[0][0] = 1
for i in (1..s)
  for j in (0..i)
    dp[i][j] = dp[i-1][j-1]*(pos_u[i-1]-j+1) if j > 0
    dp[i][j] += dp[i-1][j]*(pos_d[i-1]-d+(i-j)) if j < i
    dp[i][j] %= DIV
  end
end
p dp[s][u]