CF1743G Antifibonacci Cut

Description

Note that the memory limit is unusual. Let's define the sequence of Fibonacci strings as follows: $ f_0 $ is 0, $ f_1 $ is 1, $ f_i $ is $ f_{i-1} + f_{i-2} $ for $ i>1 $ ( $ + $ denotes the concatenation of two strings). So, for example, $ f_2 $ is 10, $ f_3 $ is 101, $ f_4 $ is 10110. For a given string $ s $ , let's define $ g(s) $ as the number of ways to cut it into several (any number, possibly even just one) strings such that none of these strings are Fibonacci strings. For example, if $ s $ is 10110101, $ g(s) = 3 $ since there are three ways to cut it: - 101101 $ + $ 01; - 1011 $ + $ 0101; - 1011 $ + $ 01 $ + $ 01. You are given a sequence of strings $ s_1, s_2, \dots, s_n $ . Calculate $ g(s_1), g(s_1 + s_2), \dots, g(s_1 + s_2 + \ldots + s_n) $ . Since these values can be huge, print them modulo $ 998244353 $ .

Input Format

The first line of the input contains one integer $ n $ ( $ 1 \le n \le 3 \cdot 10^3 $ ). Then, $ n $ lines follow. The $ i $ -th line contains the string $ s_i $ ( $ 1 \le |s_i| \le 10^3 $ ), consisting of characters 0 and/or 1.

Output Format

Print $ n $ integers, where the $ i $ -th integer is $ g(s_1 + s_2 + \ldots + s_i) \bmod 998244353 $ .