#P16740. 警钟敲烂

警钟敲烂

题目描述

NOIP 之后,机房里的各位都开始每天警钟长鸣。为了防止警钟被敲烂,他们会不断交换警钟的位置。

机房共有 4nm4nm 个座位,排成 2n2n 行、2m2m 列的矩形网格。第 ii 行第 jj 列的位置记为 (i,j)(i,j)

每个座位上放有一个警钟。初始时,警钟按照从上到下、从左到右的顺序编号为 114nm4nm。也就是说,位置 (i,j)(i,j) 上警钟的初始编号为

(i1)×2m+j.(i-1)\times 2m+j.

把整个网格划分成若干个互不重叠的 2×22\times 2 小网格,并将这些小网格按黄、白两色交替染色,其中左上角的小网格为黄色。下图给出了 n=2,m=3n=2,m=3 时的染色情况。

每一天,所有警钟的位置会同时发生以下五种变换之一:

  1. 对所有 i[1,2n]i\in[1,2n]j[1,m]j\in[1,m],交换位置 (i,2j1)(i,2j-1)(i,2j)(i,2j) 上的警钟;
  2. 对所有 i[1,2n]i\in[1,2n]j[1,m1]j\in[1,m-1],交换位置 (i,2j)(i,2j)(i,2j+1)(i,2j+1) 上的警钟;
  3. 对所有 i[1,n]i\in[1,n]j[1,2m]j\in[1,2m],交换位置 (2i1,j)(2i-1,j)(2i,j)(2i,j) 上的警钟;
  4. 对所有 i[1,n1]i\in[1,n-1]j[1,2m]j\in[1,2m],交换位置 (2i,j)(2i,j)(2i+1,j)(2i+1,j) 上的警钟;
  5. 对每个 2×22\times2 小网格独立进行旋转:黄色小网格中的四个警钟顺时针旋转一格,白色小网格中的四个警钟逆时针旋转一格。

给定连续 qq 天中每天采用的变换类型,请求出全部变换结束后,每个座位上的警钟编号。

输入格式

第一行包含三个整数 n,m,qn,m,q

第二行包含 qq 个整数 x1,x2,,xqx_1,x_2,\ldots,x_q,其中 xix_i 表示第 ii 天采用的变换类型。

输出格式

输出 2n2n 行,每行包含 2m2m 个整数。

ii 行第 jj 个整数表示最终位于位置 (i,j)(i,j) 上的警钟编号。

样例输入

2 3 5
3 1 4 2 5

样例输出

20 8 12 24 21 9
22 10 7 19 23 11
4 16 13 1 5 17
2 14 18 6 3 15

样例解释

初始状态及每次操作后的警钟编号如下图所示。

数据范围

对于全部数据:

1n,m,q106,1\le n,m,q\le 10^6, 1n×m2×106,1\le n\times m\le 2\times 10^6, 1xi5.1\le x_i\le 5.
子任务 分值 特殊限制
1 20 xi{1,3,5}x_i\in\{1,3,5\}
2 xi{1,2}x_i\in\{1,2\}
3 xi{1,2,3,4}x_i\in\{1,2,3,4\}
4 40 无额外限制