Tea Break 004
コンテスト日時
2019/12/30 (Mo) 21:00 - 22:40

F - ANTimatter

ผักชี
2
s
1024
MB
450

問題文

長さ $10^9$ の線分上にアリが $N$ 匹おり、線分に沿って毎秒 $1$ の距離を歩いています。
アリが線分の端点に到達したとき、そのアリは線分から落下します。

アリはこの線分上を右か左の方向に進みます。そして、左に進んでいるアリと右に進んでいるアリが衝突したとき、両方のアリが瞬時に消滅します。

いま、$N$匹のアリに関する情報として文字列$S$が与えられます。
$S$の $i$ 文字目 $(1 \leq i \leq N)$ が '<' のとき、線分の左から $i$ 番目にいるアリが左を向いていることを表します。
同様に、$S$の $i$ 文字目が '>' のとき、線分の左から $i$ 番目にいるアリが右を向いていることを表します。
また、$S$の $i$ 文字目が '?' のとき、そのアリがどちらを向いているかはわかっていません。

アリの向きとしてありえる組み合わせは、$S$ の中にある '?' の個数を $T$ として、$2^T$ 通り存在します。
それら全ての組み合わせに対し、十分な時間が経った後線分から落ちたアリの数をそれぞれ足し合わせたものを求めてください。
ただし、答えは非常に大きくなることがあるので $10^9+7$ で割った余りを求めてください。

制約

  • $1 \leq N \leq 300$
  • $N$ は整数
  • $S$ は '<', '>', '?' のみからなる $N$ 文字の文字列

入力

入力は標準入力から以下の形式で与えられる。

$N$
$S$

出力

答えを $10^9 + 7$ で割った余りを出力してください。

入力例 1
2 ><
出力例 1
0

このとき、アリの向きの列として考えられるものは$1$通りです。
このときの進み方は(左,右)のみで、ある地点で$2$匹のアリは衝突して消滅するので線分から落ちるアリは$0$匹です。

入力例 2
3 >??
出力例 2
6

このときのアリの向きの列として考えられるのは(右,左,左) (右,左,右) (右,右,左) (右,右,右)の$4$通り存在します。
線分から落ちるアリの数の和は$1+1+1+3=6$です。

入力例 3
7 >?????<
出力例 3
64
提出
C++23 (g++ 12.2.0)