This page is still under construction.

Parts of this page are still being built. What you see may change.

Table Transformation

Time limit4sMemory limit512 MB

Summary
Apply up to a million row, column, and cell swaps to a large grid, then output a weighted modular checksum; the operation list is generated by a linear recurrence.
Level

Medium7 of 10

Topics
Simulation, Array, Math, Implementation
Solved
No attempts yet

Problem

Ваня занимается работой с большими данными. Его проект занимается обработкой гигантских таблиц статистических данных. Ваня отвечает за разработку модуля преобразования таблиц, который выполняет перестановку строк, столбцов и ячеек таблицы.

Модуль занимается обработкой таблицы, состоящей из hh строк и ww столбцов, строки пронумерованы сверху вниз от 0 до h−1h - 1, столбцы пронумерованы слева направо от 0 до w−1w - 1. Ячейка в ii-й строке, jj-м столбце таблицы обозначается как [i,j][i, j]. Исходно ячейка [i,j][i, j] содержит число i×w+ji \times w + j. На рис. 1. приведен пример исходного заполнения таблицы для h=3h = 3, w=5w = 5.

01234
56789
1011121314

Рис. 1. Пример исходного заполнения таблицы.

Модуль преобразования таблиц может выполнять следующие три типа операций.

ОперацияОбозначениеДействие
Обмен столбцовc xx yyПоменять местами содержимое столбцов с номерами xx и yy
Обмен строкr xx yyПоменять местами содержимое строк с номерами xx и yy
Обмен ячеекf aa bb cc ddПоменять содержимое ячеек [a,b][a, b] и [c,d][c, d]

На рис. 2. показано, как выглядит приведенная выше таблица после выполнения последовательности операций <<c 0 1>>, <<r 0 1>>, <<f 0 0 1 2>>.

01234
56789
1011121314

выполняется операция <<c 0 1>>

10234
65789
1110121314

выполняется операция <<r 0 1>>

65789
10234
1110121314

выполняется операция <<f 0 1 1 2>>

62789
10534
1110121314

Рис. 2. Пример преобразования таблицы

После выполнения всех операций Ваня вычисляет контрольную сумму для таблицы: сумма по всем ячейкам [i,j][i, j] значений (v[i][j]×17i×19j) mod (109+7)(v[i][j] \times 17^i \times 19^j) \bmod (10^9 + 7). Здесь v[i][j]v[i][j] означает значение в ячейке [i,j][i, j], а операция << mod \bmod>> означает операцию взятия остатка. Например, контрольная сумма для таблицы из примера вычисляется следующим образом: (6×170×190+2×170×191+…+14×172×194) mod (109+7)=564 830 737(6 \times 17^0 \times 19^0 + 2 \times 17^0 \times 19^1 + \ldots + 14 \times 17^2 \times 19^4) \bmod (10^9 + 7) = 564\,830\,737.

Помогите Ване выполнить все операции и вычислить контрольную сумму таблицы, которая получится в итоге.

Поскольку входные данные для этой задачи слишком велики, чтобы задавать их непосредственно, для ввода вам потребуется процедура расширения массива. Эта процедура не имеет специфических особенностей, которые надо использовать в решении задачи, предполагаемое жюри решение этой задачи в явном виде генерирует все массивы и далее работает с ними так же, как если бы оно считало их из входных данных.

Опишем процедуру генерации массива длины nn по массиву длины 2≤k≤n2 \le k \le n. Пусть задан массив целых неотрицательных чисел A=(a[1],a[2],…,a[k])A = (a[1], a[2], \ldots, a[k]). Массив целых чисел Ax=(ax[1],ax[2],…,ax[n])Ax = (ax[1], ax[2], \ldots, ax[n]) будем называть расширением массива AA по модулю rr до размера nn, если его элементы вычисляются по следующим формулам.

  • Если 1≤i≤k1 \le i \le k, то ax[i]=a[i]ax[i] = a[i].
  • Если k+1≤i≤nk + 1 \le i \le n, то ax[i]=(10007×ax[i−2]+10009×ax[i−1]+87277) mod rax[i] = (10007 \times ax[i - 2] + 10009 \times ax[i - 1] + 87277) \bmod r.

Здесь как <> также обозначена операция взятия остатка по модулю rr.

Например, выполним расширение массива A=(1,4,3)A=(1, 4, 3) до 5 элементов по модулю 13.

  • ax[1]=a[1]=1ax[1] = a[1] = 1.
  • ax[2]=a[2]=4ax[2] = a[2] = 4.
  • ax[3]=a[3]=3ax[3] = a[3] = 3.
  • ax[4]=(10007×ax[2]+10009×ax[3]+87277) mod 13=157332 mod 13=6ax[4] = (10007 \times ax[2] + 10009 \times ax[3] + 87277) \bmod 13 = 157332 \bmod 13 = 6.
  • ax[5]=(10007×ax[3]+10009×ax[4]+87277) mod 13=177352 mod 13=6ax[5] = (10007 \times ax[3] + 10009 \times ax[4] + 87277) \bmod 13 = 177352 \bmod 13 = 6.

Таким образом, Ax=(1,4,3,6,6)Ax = (1, 4, 3, 6, 6).

Input

Первая строка ввода содержит числа hh, ww, nn --- размеры таблицы и число преобразований, которые необходимо выполнить (1≤h,w≤5 0001 \le h, w \le 5\,000, 2≤n≤1062 \le n \le 10^6).

Вторая строка содержит строку ss длины nn --- последовательность типов преобразований, s[i]s[i] = <<c>> задает операцию обмена столбцов, s[i]s[i] = <<r>> --- операцию обмена строк, s[i]s[i] = <<f>> --- операцию обмена ячеек.

Следующие четыре строки задают массивы AA, BB, CC, DD, соответственно. Каждый массив задается числом kk, 2≤k≤n2 \le k \le n, k≤1000k \le 1000, после чего следует kk чисел --- элементы массива. Элементы массивов AA и CC удовлетворяют ограничению 0≤a[i],c[i]≤h−10 \le a[i], c[i] \le h - 1, элементы массивов BB и DD удовлетворяют ограничению 0≤b[i],d[i]≤w−10 \le b[i], d[i] \le w - 1.

Пусть AxAx является расширением массива AA по модулю hh до размера nn, массив BxBx является расширением массива BB по модулю ww до размера nn, массив CxCx является расширением массива CC по модулю hh до размера nn и массив DxDx является расширением массива DD по модулю ww до размера nn.

Операции, которые требуется выполнить с таблицей, определяются следующим образом: тип ii-й операции задается символом s[i]s[i], а параметры получаются из массивов AxAx, BxBx, CxCx, DxDx.

  • Если s[i]s[i] = <<c>>, то ii-я операция <<c Bx[i]Bx[i] Dx[i]Dx[i]>>;
  • Если s[i]s[i] = <<r>>, то ii-я операция <<r Ax[i]Ax[i] Cx[i]Cx[i]>>;
  • Если s[i]s[i] = <<f>>, то ii-я операция <<f Ax[i]Ax[i] Bx[i]Bx[i] Cx[i]Cx[i] Dx[i]Dx[i]>>;

Output

Выведите одно число --- контрольную сумму таблицы после выполнения всех преобразований.

Examples1

  1. Example 1

    Input
    3 5 3
    crf
    3 0 0 0
    3 0 0 1
    3 0 1 1
    3 1 0 2
    
    Expected output
    564830737