CF BUDDY
← Problems·

1129C · Morse Code

2400 · binary search, data structures, dp

Problem: In Morse code, an letter of English alphabet is represented as a string of some length from 11 to 44. Moreover, each Morse code representation of an English letter contains only dots and dashes. In this task, we will represent a dot with a "0" and a dash with a "1".

Because there are 21+22+23+24=302^1+2^2+2^3+2^4 = 30 strings with length 11 to 44 containing only "0" and/or "1", not all of them correspond to one of the 2626 English letters. In particular, each string of "0" and/or "1" of length at most 44 translates into a distinct English letter, except the following four strings that do not correspond to any English alphabet: "0011", "0101", "1110", and "1111".

You will work with a string SS, which is initially empty. For mm times, either a dot or a dash will be appended to SS, one at a time. Your task is to find and report, after each of these modifications to string SS, the number of non-empty sequences of English letters that are represented with some substring of SS in Morse code.

Since the answers can be incredibly tremendous, print them modulo 109+710^9 + 7.

Input Format: The first line contains an integer mm (1m30001 \leq m \leq 3\,000) — the number of modifications to SS.

Each of the next mm lines contains either a "0" (representing a dot) or a "1" (representing a dash), specifying which character should be appended to SS.

Output Format: Print mm lines, the ii-th of which being the answer after the ii-th modification to SS.

Note: Let us consider the first sample after all characters have been appended to SS, so S is "111".

As you can see, "1", "11", and "111" all correspond to some distinct English letter. In fact, they are translated into a 'T', an 'M', and an 'O', respectively. All non-empty sequences of English letters that are represented with some substring of SS in Morse code, therefore, are as follows.

  1. "T" (translates into "1")
  2. "M" (translates into "11")
  3. "O" (translates into "111")
  4. "TT" (translates into "11")
  5. "TM" (translates into "111")
  6. "MT" (translates into "111")
  7. "TTT" (translates into "111")

Although unnecessary for this task, a conversion table from English alphabets into Morse code can be found here.

Sample Cases

Case 1

Input

3
1
1
1

Output

1
3
7

Case 2

Input

5
1
0
1
0
1

Output

1
4
10
22
43

Case 3

Input

9
1
1
0
0
0
1
1
0
1

Output

1
3
10
24
51
109
213
421
833

Similar problems

00:00:00
Loading editor…
Welcome! I'm your coding tutor for this problem. Use the chips below to reveal stored hints or get AI feedback on your code. I'll guide you step by step — never giving away the solution.

Sign in to unlock AI tutor feedback