Problem:
Score : 100 points

Problem Statement

Let N be a positive integer.
You are given a string s of length N - 1, consisting of < and >.

Find the number of permutations (p_1, p_2, \ldots, p_N) of (1, 2, \ldots, N) that satisfy the following condition, modulo 10^9 + 7:

For each i (1 \leq i \leq N - 1), p_i < p_{i + 1} if the i-th character in s is <, and p_i > p_{i + 1} if the i-th character in s is >.

Constraints

N is an integer.

2 \leq N \leq 3000

s is a string of length N - 1.

s consists of < and >.

Input

Input is given from Standard Input in the following format:

N
s

Output

Print the number of permutations that satisfy the condition, modulo 10^9 + 7.

Sample Input 1

4
<><

Sample Output 1

5

There are five permutations that satisfy the condition, as follows:

(1, 3, 2, 4)

(1, 4, 2, 3)

(2, 3, 1, 4)

(2, 4, 1, 3)

(3, 4, 1, 2)

Sample Input 2

5
<<<<

Sample Output 2

1

There is one permutation that satisfies the condition, as follows:

(1, 2, 3, 4, 5)

Sample Input 3

20
>>>><>>><>><>>><<>>

Sample Output 3

217136290

Be sure to print the number modulo 10^9 + 7.

Solution in C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define pb push_back
#define pii pair<int,int>
using namespace std;
const int mod = 1e9+7;
int n;
string s;
int dp[3005][3005],pr[3005];// dp[i][j] _ after i-th position,there are j more left less than i
main() {
    cin >> n >> s;
    s.insert(s.begin(),'<');

    dp[0][0] = 1;
    for (int i  = 0; i < n; i++) {
    int rem = n - i;
    pr[0] = dp[i][0];
    for (int j = 1; j <= n; j++)
        pr[j] = (pr[j-1] + dp[i][j])%mod;
    //for (int j = 0; j <= rem; j++)
     if (s[i] == '<') {
     for (int j = 0; j <= rem; j++)
        (dp[i+1][j] += pr[j])%=mod;
      //  for (int k = j;k <=rem;k++)
       //     (dp[i+1][k] += dp[i][j])%=mod;
        }
        else {
        for (int j = 0; j < rem; j++)
        (dp[i+1][j] += (pr[rem] - pr[j])%mod)%=mod;
            //for (int k = 0; k < j;k++)

            //(dp[i+1][k] += dp[i][j])%=mod;
        }
    }
    cout << dp[n][0];



}
/*
5
<<<<
20
>>>><>>><>><>>><<>>



*/