뒤집기와 회전

시간 제한2초메모리 제한64 MB

요약
최대 10만 개의 행렬 변환(전치, 반전, 회전) 연산을 순서대로 효율적으로 적용해 최종 행렬을 출력하는 문제입니다.
난이도

보통10점 중 5점

유형
행렬, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

출력 가능한 문자로 이루어진 mm행 nn열 행렬 AA가 주어진다. 행은 첫 번째 첨자로 11부터, 열은 두 번째 첨자로 11부터 번호를 매긴다. 한 번의 연산은 현재 행렬을 다음 규칙 중 하나에 따라 새로운 행렬 BB로 바꾼다(백틱 안의 문자가 연산 식별자이다).

  • 주대각선 기준 전치 (1): Bj,i=Ai,jB_{j,i} = A_{i,j}
  • 반대각선 기준 전치 (2): Bn−j+1,m−i+1=Ai,jB_{n-j+1,m-i+1} = A_{i,j}
  • 상하 뒤집기 (H): Bm−i+1,j=Ai,jB_{m-i+1,j} = A_{i,j}
  • 좌우 뒤집기 (V): Bi,n−j+1=Ai,jB_{i,n-j+1} = A_{i,j}
  • 시계 방향으로 9090 (A), 180180 (B), 270270 (C)도 회전; 9090도인 경우 Bj,m−i+1=Ai,jB_{j,m-i+1} = A_{i,j}
  • 반시계 방향으로 9090 (X), 180180 (Y), 270270 (Z)도 회전; 9090도인 경우 Bn−j+1,i=Ai,jB_{n-j+1,i} = A_{i,j}

이러한 연산들의 수열이 최대 100,000개 주어진다. 주어진 순서대로 행렬에 적용한 뒤 결과 행렬을 출력하여라.

입력

첫째 줄에 두 정수 mm과 nn이 주어진다 (0<m,n≤3000 < m, n \le 300). 다음 mm개의 줄에는 각각 정확히 nn개의 출력 가능한 문자가 주어진다. 출력 가능한 문자란 ASCII 코드가 3333 이상 126126 이하인 기호를 뜻하며, 이 줄들에는 다른 문자가 포함되지 않는다. 그다음 줄에는 적용할 연산들의 수열이 한 글자짜리 식별자로 주어지며, 왼쪽에서 오른쪽 순서로 적용한다.

출력

먼저 결과 행렬의 행 수와 열 수를 나타내는 두 정수를 출력한다. 이어서 입력과 같은 형식으로 결과 행렬을 출력한다.

예제5

  1. 예제 1

    입력
    3 4
    0000
    a0b0
    cdef
    A1
    
    예상 출력
    3 4
    cdef
    a0b0
    0000
    
  2. 예제 2

    입력
    1 1
    Q
    ABCXYZ12HV
    
    예상 출력
    1 1
    Q
    
  3. 예제 3

    입력
    1 5
    hello
    V
    
    예상 출력
    1 5
    olleh
    
  4. 예제 4

    입력
    5 1
    a
    b
    c
    d
    e
    A
    
    예상 출력
    1 5
    edcba
    
  5. 예제 5

    입력
    2 3
    abc
    def
    11
    
    예상 출력
    2 3
    abc
    def