Олимпиадный тренинг

Задача . I. Считать всегда весело


Вам дан бинарный\(^\dagger\) шаблон \(p\) длины \(n\).

Бинарная строка \(q\) той же длины \(n\) называется хорошей, если для каждого \(i\) (\(1 \leq i \leq n\)) существуют индексы \(l\) и \(r\) такие, что:

  • \(1 \leq l \leq i \leq r \leq n\), и
  • \(p_i\) является модой\(^\ddagger\) строки \(q_lq_{l+1}\ldots q_r\).

Подсчитайте количество хороших бинарных строк по модулю \(998\,244\,353\).

\(^\dagger\) Бинарная строка — это строка, состоящая только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

\(^\ddagger\) Символ \(c\) является модой строки \(t\) длины \(m\), если число вхождений \(c\) в \(t\) не меньше \(\lceil \frac{m}{2} \rceil\). Например, \(\mathtt{0}\) является модой \(\mathtt{010}\), \(\mathtt{1}\) не является модой \(\mathtt{010}\), и оба \(\mathtt{0}\) и \(\mathtt{1}\) являются модами \(\mathtt{011010}\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину бинарной строки \(p\).

Вторая строка содержит бинарную строку \(p\) длины \(n\), состоящую только из символов 0 и 1.

Выходные данные

Выведите количество хороших строк по модулю \(998\,244\,353\).

Примечание

Во втором примере хорошими строками являются

  • \(\mathtt{010}\),
  • \(\mathtt{011}\),
  • \(\mathtt{101}\),
  • \(\mathtt{110}\),
  • \(\mathtt{111}\).

Примеры
Входные данныеВыходные данные
1 1
0
1
2 3
111
5
3 4
1011
9
4 6
110001
36
5 12
111010001111
2441

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя