Сегодня в общаге праздник — приехал Олег, в честь чего девочки подарили ему строку. Олегу очень понравился подарок, поэтому он тут же придумал и предложил вам, лучшему его другу, следующую задачу.
Вам дана строка \(s\) длины \(n\), которая состоит из первых \(17\) строчных букв латинского алфавита {\(a\), \(b\), \(c\), \(\ldots\), \(p\), \(q\)} и знаков вопроса. А также \(q\) запросов. Каждый запрос характеризуется набором попарно различных строчных первых \(17\) букв латинского алфавита, которые можно использовать чтобы заменить знаки вопроса в строке \(s\).
Ответом на запрос является сумма количества различных подстрок, которые являются палиндромами, по всем строкам, которые можно получить из изначальной строки \(s\) путем замены знаков вопроса на разрешенные символы. Ответ необходимо посчитать по модулю \(998\,244\,353\).
Обратите внимание! Две подстроки являются различными, когда отличаются их позиции начала и окончания в строке. Т. е. количество различных подстрок, которые являются палиндромами, для строки aba будет \(4\): a, b, a, aba.
Рассмотрим примеры замены знаков вопроса на буквы. Например, из строки aba??ee при запросе {\(a\), \(b\)} можно получить строки ababaee или abaaaee но нельзя получить строки pizza, abaee, abacaba, aba?fee, aba47ee, или abatree.
Напомним, что палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево.
Выходные данные
На каждый запрос выведите одно число — суммарное количество подстрок-палиндромов во всех возможных строках, которые можно получить из строки \(s\), по модулю \(998\,244\,353\).
Примечание
Рассмотрим первый пример и первый запрос в нём. У нас может получится только одна строка по итогам замены знаков вопроса — abaaaba. В ней есть такие подстроки-палиндромы:
- a — подстрока [\(1\); \(1\)].
- b — подстрока [\(2\); \(2\)].
- a — подстрока [\(3\); \(3\)].
- a — подстрока [\(4\); \(4\)].
- a — подстрока [\(5\); \(5\)].
- b — подстрока [\(6\); \(6\)].
- a — подстрока [\(7\); \(7\)].
- aa — подстрока [\(3\); \(4\)].
- aa — подстрока [\(4\); \(5\)].
- aba — подстрока [\(1\); \(3\)].
- aaa — подстрока [\(3\); \(5\)].
- aba — подстрока [\(5\); \(7\)].
- baaab — подстрока [\(2\); \(6\)].
- abaaaba — подстрока [\(1\); \(7\)].
В третьем запросе у нас может получится 4 строки: abaaaba, abababa, abbaaba, abbbaba.