#include #define MAXN 500005 #define MOD 998244353 int N; char A[MAXN]; int can1[MAXN], can0[MAXN]; int main() { scanf("%d", &N); scanf("%s", A + 1); // suffix: can become 1 can1[N+1] = 0; for (int i = N; i >= 1; i--) { can1[i] = can1[i+1] || (A[i] == '1'); } // prefix: can become 0 can0[0] = 0; for (int i = 1; i <= N; i++) { can0[i] = can0[i-1] || (A[i] == '0'); } long long ans = 0; // count monotonic strings for (int k = 0; k <= N; k++) { int ok = 1; if (k > 0 && !can1[k]) ok = 0; if (k < N && !can0[k+1]) ok = 0; if (ok) ans++; } // check if original is monotonic (no "01") int monotonic = 1; for (int i = 1; i < N; i++) { if (A[i] == '0' && A[i+1] == '1') { monotonic = 0; break; } } // if original is NOT monotonic, add it if (!monotonic) ans++; printf("%lld\n", ans % MOD); return 0; }