TRẢI THẢM (CARPET)

Xem dạng PDF

Gửi bài giải

Điểm: 2,00 (OI)
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Nguồn bài:
lmh
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Giáo sư X làm một tấm thảm hình chữ nhật kích thước ~m \times n~ được lắp ghép từ những mảnh xốp hình vuông đơn vị, tạo thành một lưới với các hàng đánh số từ ~1~ tới ~m~ từ trên xuống và các cột đánh số từ ~1~ tới ~n~ từ trái qua phải. Mảnh xốp nằm trên giao của hàng ~i~ và cột ~j~ được gọi là mảnh ~(i, j)~, trên đó in một số nguyên ~f_{ij}~.

Trên tấm thảm, ta gọi miền ~(a, b, c, d)~ là một vùng hình chữ nhật có cạnh song song với cạnh thảm, góc trái trên là ô ~(a, b)~, góc phải dưới là ô ~(c, d)~ ~(1 \le a \le c \le m; 1 \le b \le d \le n)~. Miền này chứa tất cả các mảnh ~(i, j)~ trong đó ~a \le i \le c~ và ~b \le j \le d~.

Những bé ở trường mầm non SuperKids thông minh nhưng rất tinh nghịch. Các bé đã thực hiện ~k~ thao tác trên tấm thảm, mỗi thao tác thuộc một trong hai dạng:

  • H a b c d: Tách rời miền ~(a, b, c, d)~, lật úp miền này lại sao cho mép phải của miền trở thành mép trái và mép trái trở thành mép phải, sau đó đặt lại miền đã lật úp vào đúng chỗ vừa lấy ra.
  • V a b c d: Tách rời miền ~(a, b, c, d)~, lật úp miền này lại sao cho mép trên của miền trở thành mép dưới và mép dưới trở thành mép trên, sau đó đặt lại miền đã lật úp vào đúng chỗ vừa lấy ra.

Sau ~k~ thao tác, các bé xét từng hàng từ trên xuống, trên mỗi hàng lần lượt tháo rời từng mảnh theo thứ tự từ trái qua phải. Điều tình cờ là các số in trên các mảnh theo thứ tự tháo rời như vậy lập thành dãy số nguyên liên tiếp từ ~1~ tới ~m \times n~.

Giáo sư X yêu cầu các bé phải xếp lại các mảnh thành tấm thảm theo đúng vị trí ban đầu. Mặc dù không nhớ vị trí ban đầu của các mảnh, các bé đã ghi lại đầy đủ và chính xác dãy ~k~ thao tác đã thực hiện. Hãy giúp các bé xác định các giá trị ~f_{ij}~ ~(1 \le i \le m; 1 \le j \le n)~ nhé.

Input
  • Dòng đầu tiên chứa ba số nguyên dương ~m, n, k~ ~(m, n \le 1000; k \le 2000)~.
  • ~k~ dòng tiếp theo, mỗi dòng chứa một ký tự H hoặc V và ~4~ số nguyên ~a, b, c, d~ ~(1 \le a \le c \le m; 1 \le b \le d \le n)~ ứng với một thao tác. Các thao tác được liệt kê theo đúng thứ tự thực hiện.

Các ký tự và các số trên cùng một dòng được ghi cách nhau bởi dấu cách.

Output
  • In ra ~m~ dòng, dòng thứ ~i~ gồm ~n~ số cách nhau bởi dấu cách, số thứ ~j~ là ~f_{ij}~.

Scoring
Subtask Điểm Giới hạn
~1~ ~50\%~ ~m, n, k \le 300~
~2~ ~50\%~ Không có ràng buộc gì thêm
Sample Input 1
4 4 2
H 2 2 3 4
V 1 1 4 2
Sample Output 1
13 14 3 4
9 8 7 10
5 12 11 6
1 2 15 16
Notes

Tấm thảm ban đầu:

13 14 3 4
9 8 7 10
5 12 11 6
1 2 15 16

Sau thao tác H 2 2 3 4 (miền được lật in đậm):

13 14 3 4
9 10 7 8
5 6 11 12
1 2 15 16

Sau thao tác V 1 1 4 2 (miền được lật in đậm), các số theo thứ tự tháo rời là ~1, 2, \ldots, 16~:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Đang tải...