Быстрый исполнитель
시간 제한3초메모리 제한1024 MB
배열 a와 시프트 및 비트 연산의 반복 순서가 주어질 때, p번 반복한 뒤 배열 b의 최종 상태를 구한다.
문제
Студент первого курса ИТМО Миша изучает новый примитивный язык программирования. В этом языке все операции производятся над массивами целых неотрицательных чисел длины .
Миша успел создать массив и равный ему массив . Также он успел реализовать четыре функции:
shift--- делает циклический сдвиг массива влево на , то есть при выполняет присваиваниеxor--- присваивает в массив его поэлементныйxor(побитовое исключающее <<или>>) с массивом , то естьand--- присваивает в массив его поэлементныйand(побитовое <<и>>) с массивом ;or--- присваивает в массив его поэлементныйor(побитовое <<или>>) с массивом .
Используя эти функции, Миша написал программу, задаваемую последовательностью операций xor, and и or длины . Программа в цикле раз выполняет следующие действия: для каждой операции из последовательности сначала вызывается shift, а затем соответствующая этой операции функция. Так, для последовательности операций и программа будет выглядеть как
b = a = [...]
repeat 5 times {
shift
or
shift
xor
shift
and
}
К сожалению, язык еще новый, и его интерпретатор не справляется с выполнением такой программы. Помогите Мише определить, чему будет равно конечное состояние массива после выполнения заданной программы.
입력
В первой строке ввода перечислены четыре целых числа , , и --- длина массива, количество операций в последовательности, величина сдвига и количество повторений (; ; ).
Во второй строке перечислены целых чисел --- элементы массива , они же --- изначальные значения элементов массива ().
В третьей строке через пробел перечисены слов, каждое из которых равно <<xor>>, <<and>> или <<or>> --- последовательность применяемых на каждой итерации цикла операций.
출력
Выведите целых чисел --- элементы массива после выполнения описанной программы.