#include <cstdio>
using namespace std;
 
struct dps
{
    int a[2];
};
const int key = 10007;
const dps empty = {{1, 1}};
int l, oslev = 1, fslev = 1;
dps fs[100005];
char os[100005], s[100003];
 
inline void calc(char op, dps &a, dps &b)
{
    if (op == '+')
    {
        a.a[1] = (a.a[1] * (b.a[0] + b.a[1]) + a.a[0] * b.a[1]) % key;
        a.a[0] = a.a[0] * b.a[0] % key;
    } else
    {
        a.a[0] = (a.a[0] * (b.a[0] + b.a[1]) + a.a[1] * b.a[0]) % key;
        a.a[1] = a.a[1] * b.a[1] % key;
    }
}
int main()
{
    //freopen("exp.in" ,"r", stdin);
    //freopen("exp.out", "w", stdout);
    scanf("%d%s", &l, &s);
    os[1] = '(';
    fs[1] = empty;
    s[l] = ')';
    for (int i=0; i<=l; i++)
        if (s[i] == '(')
            os[++oslev] = '('; else
        if (s[i] == ')')
        {
            for (; os[oslev] != '('; --oslev, --fslev)
                calc(os[oslev], fs[fslev - 1], fs[fslev]);
            --oslev;
        } else
        {
            for (; (os[oslev] <= s[i]) && (os[oslev] != '('); --oslev, --fslev)
                calc(os[oslev], fs[fslev - 1], fs[fslev]);
            os[++oslev] = s[i];
            fs[++fslev] = empty;
        }
    printf("%d\n", fs[1].a[0]);
    return 0;
}
/**************************************************************
	Problem: 2303
	User: admin
	Language: C++
	Result: Accepted
	Time:48 ms
	Memory:2120 kb
****************************************************************/