# snippet: templete_ # Last Modified: 2026-02-13 from collections import deque, defaultdict from itertools import permutations, product from bisect import bisect_left, bisect_right from heapq import heappush, heappop from random import randint, shuffle from time import perf_counter as pc def II(): return int(input()) def LI(): return list(map(int,input().split())) def LI_1(): return [int(x) - 1 for x in input().split()] def SI(): return input() def LS(): return list(input().split()) mod = 998244353 inf = 1001001001001001001 import sys sys.setrecursionlimit(10 ** 6) input = lambda: sys.stdin.readline().rstrip() _buf = [] def print(*a, **k): _buf.append(" ".join(map(str, a))) def solve(): N = II() A = SI() ans = 1 prev = -1 cnt = 0 res = 0 for i in range(N): if prev == -1: prev = A[i] cnt = 1 elif prev == A[i]: cnt += 1 else: if A[i] == "1": res = cnt elif res != 0: ans = ans * (res + cnt + 1) % mod prev = A[i] cnt = 1 if prev == "1" and res != 0: ans = ans * (res + cnt + 1) % mod print(ans) return if __name__ == "__main__": T = 1 # T = II() for _ in range(T): solve() sys.stdout.write("\n".join(_buf) + "\n")