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

Задача . E. Преобразования краев


Рассмотрим некоторое множество различных символов \(A\) и некоторую строку \(S\), состоящую ровно из \(n\) символов, где каждый символ присутствует в \(A\).

Задан массив \(b\) из \(m\) целых чисел (\(b_1 < b_2 < \dots < b_m\)).

Разрешено проводить следующую операцию над строкой \(S\):

  1. Выбрать некоторый корректный \(i\) и выставить \(k = b_i\);
  2. Взять первые \(k\) символов \(S = Pr_k\);
  3. Взять последние \(k\) символов \(S = Su_k\);
  4. Заменить первые \(k\) символов \(S\) развернутой \(Su_k\);
  5. Заменить последние \(k\) символов \(S\) развернутой \(Pr_k\).

Например, рассмотрим строку \(S =\) «abcdefghi» и \(k = 2\). \(Pr_2 =\) «ab», \(Su_2 =\) «hi». Развернутые \(Pr_2 =\) «ba», \(Su_2 =\) «ih». Следовательно, полученная \(S\) равна «ihcdefgba».

Данная операция может быть проведена произвольное количество раз (возможно, ноль). Любой \(i\) может быть выбран несколько раз в ходе проведения операций.

Назовем строки \(S\) и \(T\) равными тогда и только тогда, когда существует такая последовательность операций, которая преобразовывает строку \(S\) в строку \(T\). Для приведенного выше примера «abcdefghi» и «ihcdefgba» равны. Обратите внимание, что это подразумевает и \(S = S\).

Задача проста. Посчитайте количество различных строк.

Ответ может быть достаточно велик, поэтому посчитайте его по модулю \(998244353\).

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

В первой строке записаны три целых числа \(n\), \(m\) и \(|A|\) (\(2 \le n \le 10^9\), \(1 \le m \le min(\frac n 2, 2 \cdot 10^5)\), \(1 \le |A| \le 10^9\)) — длина строки, размер массива \(b\) и размер множества \(A\), соответственно.

Во второй строке записаны \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le \frac n 2\), \(b_1 < b_2 < \dots < b_m\)).

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

Выведите единственное целое число — количество различных строк длины \(n\) с символами из множества \(A\) по модулю \(998244353\).

Примечание

Приведены все различные строки для первого примера. Выбранные буквы 'a' и 'b' только чтобы показать, что символы в \(A\) различны.

  1. «aaa»
  2. «aab» = «baa»
  3. «aba»
  4. «abb» = «bba»
  5. «bab»
  6. «bbb»

    Примеры
    Входные данныеВыходные данные
    1 3 1 2
    1
    6
    2 9 2 26
    2 3
    150352234
    3 12 3 1
    2 5 6
    1

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

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