만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

매직 큐브

시간 제한1초메모리 제한2048 MB

요약
n×n×n 큐브의 작은 큐브에 번호가 매겨져 있고, 슬라이스 회전이 여러 번 주어집니다. 회전 후 질의한 위치에 놓인 큐브의 번호를 구합니다.
난이도

보통10점 중 6점

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

문제

n×n×nn \times n \times n 크기의 큐브를 들고 있다고 생각해 보자. 큐브는 n3n^3개의 작은 큐브로 나뉘어 있고, 각 작은 큐브에는 1부터 n3n^3까지 번호가 붙어 있다. 축 방향은 xx축이 왼쪽에서 오른쪽, yy축이 뒤에서 앞, zz축이 아래에서 위이다. 예를 들어 2×2×22 \times 2 \times 2 큐브의 번호는 다음과 같다.

아래층 (z=1z=1):

1 2 
3 4

위층 (z=2z=2):

5 6 
7 8

이 2×2×22 \times 2 \times 2 큐브에서 큐브 1은 (1, 1, 1)에 있고, 큐브 2는 (2, 1, 1), 큐브 3은 (1, 2, 1), 큐브 5는 (1, 1, 2)에 있다.

슬라이스 kk에서 큐브를 xx, yy, zz축 중 하나로 회전하면, (k+1)(k+1)번째 층과 그 축의 증가 방향으로 kk 이후에 있는 모든 층이 함께 회전한다.

입력

첫 줄에 두 정수 nn (2≤n≤1 0002 \leq n \leq 1\,000)과 mm (1≤m≤2 0001 \leq m \leq 2\,000)이 주어진다. nn은 큐브의 크기이고, mm은 연산의 개수이다.

다음 mm개의 줄에는 아래 중 하나의 형식으로 연산이 주어진다.

  • x, θ\theta, kk: 슬라이스 k+1k+1부터 nn까지를 xx축을 기준으로 반시계 방향으로 θ\theta도 회전한다.
  • y, θ\theta, kk: 슬라이스 k+1k+1부터 nn까지를 yy축을 기준으로 반시계 방향으로 θ\theta도 회전한다.
  • z, θ\theta, kk: 슬라이스 k+1k+1부터 nn까지를 zz축을 기준으로 반시계 방향으로 θ\theta도 회전한다.
  • q x y z: 질의 연산이다. 위치 (x,y,z)(x, y, z)에 있는 큐브의 번호를 출력한다.

처음 세 연산에서는 0≤k≤n−10 \leq k \leq n-1이고 θ∈{90,180,270,360}\theta \in \{90, 180, 270, 360\}이 보장된다. 질의에서 (x,y,z)(x, y, z)는 질의할 위치이며 1≤x,y,z≤n1 \leq x, y, z \leq n이다. 질의는 적어도 하나 주어진다. 큐브는 연산 사이에 초기화되지 않으며, 회전은 누적된다.

출력

각 질의 연산마다 주어진 위치에 있는 큐브의 번호를 한 줄에 하나씩 출력한다.

예제3

  1. 예제 1

    입력
    2 8
    x 360 1
    y 360 1
    q 1 1 2
    z 90 1
    x 360 1
    q 1 2 1
    q 2 1 1
    q 2 2 2
    
    예상 출력
    5
    3
    2
    7
    
  2. 예제 2

    입력
    2 7
    x 180 1
    q 1 1 1
    q 1 1 2
    y 270 1
    q 2 1 1
    q 2 1 2
    q 2 2 1
    
    예상 출력
    1
    5
    8
    4
    2
    
  3. 예제 3

    입력
    3 7
    y 270 1
    q 1 1 1
    q 1 2 3
    z 360 2
    q 3 2 1
    q 2 2 2
    q 3 3 3
    
    예상 출력
    1
    4
    24
    14
    25