#include #include #include #include using namespace std; using u64 = unsigned long long; constexpr int MOD = 998244353; inline int add(int x, int y) { return x + y >= MOD ? x + y - MOD : x + y; } inline int mul(int x, int y) { return x * (u64)y % MOD; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N; string s; cin >> N >> s; vector f(N, vector(N)), sum(N, vector(N)); if (s[0] == '1') { f[0][0] = N; ranges::fill(sum[0], N); } else { for (int i = 0; i < N; ++i) { f[0][i] = 1; sum[0][i] = i + 1; } } for (int i = 1; i < N; ++i) { for (int j = 0; j < N; ++j) { if (s[i] == '0') { f[i][j] = add(f[i][j], sum[i - 1][j]); if (j + 1 < N) f[i][j] = add(f[i][j], mul(f[i - 1][j + 1], j + 1)); } else f[i][j] = add(f[i][j], mul(f[i - 1][j], N - i - j)); sum[i][j] = add(j > 0 ? sum[i][j - 1] : 0, f[i][j]); } } cout << f.back()[0] << '\n'; return 0; }