#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 505, mod = 998244353;
int n, ans = 0, dp[N][N], f[N][N];
string a;
int mp(char c) {
if (c == '?') return 5;
if (c == '(') return -1;
if (c == ')') return 1;
if (c == '[') return -2;
if (c == ']') return 2;
if (c == '{') return -3;
if (c == '}') return 3;
}
int check(char c, char c2) {
if ((c=='('&&c2=='?')||(c=='['&& c2=='?')||(c=='{'&& c2=='?')||(c=='?'&&c2==')')||(c == '?'&&c2==']')||(c=='?'&&c2=='}')||(mp(c)+mp(c2)==0)) {
return 1;
}
else if (c=='?'&&c2=='?') {
return 3;
}
else return 0;
}
signed main() {
freopen("toad.in","r",stdin);
freopen("toad.out","w",stdout);
cin >> n >> a;
a = ' ' + a;
for (int len = 0; len <= n; len += 2) {
for (int i = 1; i + len - 1 <= n; ++i) {
int j = i + len - 1;
if (len == 0) {
dp[i][j] = 1;
continue;
}
f[i][j] = check(a[i], a[j]);
dp[i][j] += dp[i + 1][j - 1] * f[i][j];
dp[i][j] %= mod;
f[i][j] = dp[i][j] % mod;
for (int k = i + 1; k < j; ++k) {
dp[i][j] += (dp[i][k] * f[k + 1][j]);
dp[i][j] %= mod;
}
}
}
// if (dp[1][n] == 1) cout << 0;
cout << dp[1][n] % mod;
return 0;
}
/*
10
(?([?)]?}?
*/
被
2
)(
hack了