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

Задача . C. LR-остатки


Вам задан массив \(a\) длины \(n\), положительное целое число \(m\) и строка команд из \(n\) символов. Каждая команда — это либо символ 'L', либо символ 'R'.

Обработайте все \(n\) команд в порядке их записи в строке \(s\). Обработка команды производится следующим образом:

  • сначала выведите остаток от произведения значений всех элементов массива \(a\) при делении на \(m\),
  • затем, если команда равна 'L', то удалите из массива \(a\) крайний левый элемент, если команда равна 'R', то удалите из массива \(a\) крайний правый элемент.

Обратите внимание, что после каждого хода длина массива \(a\) уменьшается на \(1\) и после обработки всех команд он окажется пустым.

Напишите программу, которая совершит обработку всех команд в порядке из записи в строке \(s\) (слева направо).

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

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Каждый набор входных данных задаётся тремя строками.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2\cdot10^5, 1 \le m \le 10^4\)) — начальная длина массива \(a\) и значение, по которому надо брать остаток.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^4\)) — элементы массива \(a\).

Третья строка состоит из \(n\) букв 'L' и 'R' — строка команд \(s\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

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

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\), где \(b_i\) — остаток при делении произведения всех элементов текущего состояния массива \(a\) на \(m\) в начале выполнения \(i\)-й команды.

Примечание

В первом наборе входных данных примера:

  • \(3 \cdot 1 \cdot 4 \cdot 2 \bmod 6 = 24 \bmod 6 = 0\);
  • \(s_1 = \text{L}\), так что удалим первый элемент и получим массив \([1, 4, 2]\);
  • \(1 \cdot 4 \cdot 2 \bmod 6 = 8 \bmod 6 = 2\);
  • \(s_2 = \text{R}\), так что удалим последний элемент и получим массив \([1, 4]\);
  • \(1 \cdot 4 \bmod 6 = 4 \bmod 6 = 4\);
  • \(s_3 = \text{R}\), так что удалим последний элемент и получим массив \([1]\);
  • \(1 \bmod 6 = 1\);
  • \(s_4 = \text{L}\), так что удалим первый элемент и получим пустой массив.

Примеры
Входные данныеВыходные данные
1 4
4 6
3 1 4 2
LRRL
5 1
1 1 1 1 1
LLLLL
6 8
1 2 3 4 5 6
RLLLRR
1 10000
10000
R
0 2 4 1 
0 0 0 0 0 
0 0 0 4 4 4 
0

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

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